2010-01-08 715 views
0

我想找到第二个<BR>标记并从此处开始搜索。我如何使用正则表达式来做到这一点?正则表达式:从第二个开始

<BR>like <BR>Abdurrahman<BR><SMALL>Fathers Name</SMALL> 

alt text

alt text

+0

谢谢你大卫。因为我早早醒来:) – uzay95 2010-01-08 07:31:55

回答

1

前面加上<BR>[^<]*(?=<BR>)你的正则表达式,或者如果你想第二<BR>后开始,如删除先行部分:<BR>[^<]*<BR>。第二<BR>之后,但在第三

查找文字:<BR>[^<]*<BR>([^<]*)<BR>

这个发现“金都”的<BR>404<BR>waldo<BR>

注:我专门用于上述代替非贪婪.*?因为一旦上述开始不为你工作,你应该stop parsing HTML with regex,并且当这种情况发生.*?将隐藏。然而,非贪婪的量词也没有得到很好的支持,如果你愿意,你总是可以改变它。

+0

请注意'
[^ <]*
'与
*不一样。
'。 – Gumbo 2010-01-08 08:17:25

+0

非常好的答案。谢谢,但我想问一个问题。这很好> [^ <] *产生这个结果'> like'。但是我想从结果中删除'>'标记。所以我只想有'喜欢'的结果。我怎样才能做到这一点? – uzay95 2010-01-08 08:18:15

+0

@Gumbo,但他们有相同的结果。 – uzay95 2010-01-08 08:19:16

0

通常解决这类问题是使用 “捕获组”。大多数正则表达式系统不仅可以提取整个匹配序列,还可以提取其中的子匹配。这是通过将()中的部分表达式分组来完成的。举例来说,如果我用下面的表达式(这是在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"

+0

你确定这个工作正常吗? – uzay95 2010-01-08 07:45:11

+0

我不确定你在找什么。你可能想澄清你的问题。这会告诉你如何找到两个'
'标签,然后是你放在括号中的其他东西。例如,如果您正在寻找“父亲”,搜索将是'
。*?
。*(Father)',并且第一个子字符串匹配是指它找到'Father'的地方。 http://rubular.com/regexes/12836 – 2010-01-08 08:06:30

0

假设你正在使用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> 

然后你可以使用“$字符串”变量,做你想做的。

以上步骤可以用其他语言完成,也可以使用您的编程语言所具有的字符串分割方法。

0

这个正则表达式应该数学前两个<br /> S:

/(\s*<br\s*/?>\s*){2}/i

所以你要么什么也没有更换,或用preg_matchRegExp.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的工作,但它应该在一切工作...

+0

你能告诉我什么是这个reges的意思吗?/(\ s * \ s *){2} /我' 我只想学习。 – uzay95 2010-01-08 08:21:02

+0

Dan:这与'
'中的任何输入文本
'都不匹配,因为除了标签之间的\ s之外,不允许其他任何内容。 – 2010-01-08 08:27:11

+0

解释/(\ S * \ S *){2}/I /#开始正则表达式 (#开始组 \ S#空白 *#的任意数量的先前(增量零) #文字 \ S#前面的空白 *#零个或多个 )#端基 {2}的组的#2 /#端的正则表达式 I#匹配非情况下灵敏地 (对不起我的间隔丢失) – ternaryOperator 2010-01-08 14:55:52