我想找到第二个<BR>
标记并从此处开始搜索。我如何使用正则表达式来做到这一点?正则表达式:从第二个开始
<BR>like <BR>Abdurrahman<BR><SMALL>Fathers Name</SMALL>
我想找到第二个<BR>
标记并从此处开始搜索。我如何使用正则表达式来做到这一点?正则表达式:从第二个开始
<BR>like <BR>Abdurrahman<BR><SMALL>Fathers Name</SMALL>
前面加上<BR>[^<]*(?=<BR>)
你的正则表达式,或者如果你想第二<BR>
后开始,如删除先行部分:<BR>[^<]*<BR>
。第二<BR>
之后,但在第三
查找文字:<BR>[^<]*<BR>([^<]*)<BR>
这个发现“金都”的<BR>404<BR>waldo<BR>
。
注:我专门用于上述代替非贪婪.*?
因为一旦上述开始不为你工作,你应该stop parsing HTML with regex,并且当这种情况发生.*?
将隐藏。然而,非贪婪的量词也没有得到很好的支持,如果你愿意,你总是可以改变它。
通常解决这类问题是使用 “捕获组”。大多数正则表达式系统不仅可以提取整个匹配序列,还可以提取其中的子匹配。这是通过将(
和)
中的部分表达式分组来完成的。举例来说,如果我用下面的表达式(这是在JavaScript中,我不知道你想成为什么样的工作语言,但在大多数语言的基本思想工作):
var string = "<BR>like <BR>Abdurrahman<BR><SMALL>Fathers Name</SMALL>";
var match = string.match(/<BR>.*?<BR>([a-zA-Z]*)/);
然后我可以得到或者使用match[0]
(即"<BR>like <BR>Abdurrahman"
)匹配的所有内容,或者我只能使用match[1]
获得圆括号内的部分,这给出"Abdurrahman"
。
你确定这个工作正常吗? – uzay95 2010-01-08 07:45:11
我不确定你在找什么。你可能想澄清你的问题。这会告诉你如何找到两个'
'标签,然后是你放在括号中的其他东西。例如,如果您正在寻找“父亲”,搜索将是'
。*?
。*(Father)',并且第一个子字符串匹配是指它找到'Father'的地方。 http://rubular.com/regexes/12836 –
2010-01-08 08:06:30
假设你正在使用PHP,你可以使用爆炸
$str='<BR>like <BR>Abdurrahman<BR><SMALL>Fathers Name</SMALL>';
$s = explode("<BR>",$str,3);
$string = end($s);
print $string;
输出上<BR>
分割你的字符串
$ php test.php
Abdurrahman<BR><SMALL>Fathers Name</SMALL>
然后你可以使用“$字符串”变量,做你想做的。
以上步骤可以用其他语言完成,也可以使用您的编程语言所具有的字符串分割方法。
这个正则表达式应该数学前两个<br />
S:
/(\s*<br\s*/?>\s*){2}/i
所以你要么什么也没有更换,或用preg_match
或RegExp.prototype.match
提取参数。
在JavaScript:
var afterReplace = str.replace(/(\s*<br\s*\/?>\s*){2}/i, '');
在PHP
$afterReplace = preg_replace('/(\s*<br\s*\/?>\s*){2}/i', '', $str);
我唯一可以肯定它会在PHP/JavaScript的工作,但它应该在一切工作...
你能告诉我什么是这个reges的意思吗?/(\ s *
\ s *){2} /我' 我只想学习。 –
uzay95
2010-01-08 08:21:02
Dan:这与'
'中的任何输入文本
'都不匹配,因为除了标签之间的\ s之外,不允许其他任何内容。 –
2010-01-08 08:27:11
解释/(\ S *
\ S *){2}/I /#开始正则表达式 (#开始组 \ S#空白 *#的任意数量的先前(增量零)
#文字 \ S#前面的空白 *#零个或多个 )#端基 {2}的组的#2 /#端的正则表达式 I#匹配非情况下灵敏地 (对不起我的间隔丢失) –
ternaryOperator
2010-01-08 14:55:52
谢谢你大卫。因为我早早醒来:) – uzay95 2010-01-08 07:31:55