正则表达式:从第二个开始

时间:2010-01-08 07:28:40

标签: regex

我想找到第二个<BR>标记并从那里开始搜索。我怎么能用正则表达式来做呢?

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

alt text

alt text

4 个答案:

答案 0 :(得分:1)

<BR>[^<]*(?=<BR>)添加到正则表达式中,或者如果要在第二个<BR>之后启动,请删除前瞻部分,例如:<BR>[^<]*<BR>

在第二个<BR>之后但在第三个之前查找文字:<BR>[^<]*<BR>([^<]*)<BR>

这会在<BR>404<BR>waldo<BR>中找到“waldo”。

注意:我专门使用了上面的内容而不是非贪婪的.*?,因为一旦上述内容开始不起作用,您应该stop parsing HTML with regex和{{1当发生这种情况时会隐藏。但是,非贪婪量词也没有得到很好的支持,如果你愿意,你可以随时改变。

答案 1 :(得分: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]获取括号内的部分,这样我{{1} }。

答案 2 :(得分:0)

假设您使用的是PHP,则可以使用explode

<BR>上拆分字符串
$str='<BR>like <BR>Abdurrahman<BR><SMALL>Fathers Name</SMALL>';
$s = explode("<BR>",$str,3);
$string = end($s);
print $string;

输出

$  php test.php
Abdurrahman<BR><SMALL>Fathers Name</SMALL>

然后你可以使用“$ string”变量并做任何你想做的事。

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

答案 3 :(得分: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中运行,但它应该适用于所有内容......