代码之家  ›  专栏  ›  技术社区  ›  uzay95

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

  •  0
  • uzay95  · 技术社区  · 15 年前

    我想找到第二个 标签并从那里开始搜索。如何使用正则表达式?

    <br>like<br>abdurrahman<br><small>父亲姓名</small>
    
    
    

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

    alt text

    4 回复  |  直到 15 年前
        1
  •  1
  •   Community basarat    7 年前

    预置 <BR>[^<]*(?=<BR>) 如果要开始,请删除lookahead部分。 之后 第二 <BR> 例如: <BR>[^<]*<BR> .

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

    这发现“瓦尔多”在 <BR>404<BR>waldo<BR> .

    注: 我特别使用上面的内容,而不是非贪婪的 .*? 因为一旦以上开始对你不起作用,你应该 stop parsing HTML with regex *? 当那发生的时候会隐藏起来。然而,非贪婪量词也没有得到很好的支持,如果你想的话,你可以随时改变它。

        2
  •  0
  •   ghostdog74    15 年前

    假设您使用的是PHP,则可以在 <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”变量并执行任何您想要的操作。

    上面的步骤也可以通过其他语言来完成,方法是使用您的prog语言所具有的字符串拆分方法。

        3
  •  0
  •   Dan Beam    15 年前

    这个正则表达式应该计算前两个 <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中工作,但它应该能在所有方面工作…

        4
  •  0
  •   Brian Campbell Dennis Williamson    15 年前

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