未找到标签之间的正则表达式文本

时间:2013-05-28 13:32:18

标签: php javascript regex

我正在尝试匹配html标记的内容/文本中的单词contact。我可以在标签之间获取所有文字:

http://rubular.com/r/IkhG2nhmnS

使用:

(?<=\"\>)(.*?)(?=\<\/)

但我想只搜索contact这个词,它不起作用:

http://rubular.com/r/We44nHisLf

使用:

(?<=\"\>)(contact*?)(?=\<\/)

任何人都可以指导我如何在html标签的文本/内容中匹配我想要的单词。在上述情况下,我想查找/匹配单词contact

感谢您的帮助

4 个答案:

答案 0 :(得分:3)

描述

此正则表达式将拉出锚标记中href内的所有文本。

<a\b[^>]*?\bhref=(['"])([^'"]*)\1[^>]*?>

enter image description here

组0将包含从<a>

的完整匹配字符串
  1. 收到href部分的公开引用。这在后面的正则表达式中用作\1以匹配关闭引用
  2. 接收href值的内容
  3. 声明

    使用正则表达式可能不是解析HTML的好主意,因为有许多边缘情况会使正则表达式绊倒。

    PHP代码示例:

    <?php
    $sourcestring="your source string";
    preg_match_all('/<a\b[^>]*?\bhref=([\'"])([^\'"]*)\1[^>]*?>/im',$sourcestring,$matches);
    echo "<pre>".print_r($matches,true);
    ?>
    
    $matches Array:
    (
        [0] => Array
            (
                [0] => <a href="contact">
            )
    
        [1] => Array
            (
                [0] => "
            )
    
        [2] => Array
            (
                [0] => contact
            )
    
    )
    

    摘要

    • <a匹配<a
    • \b单词char(\ w)和。之间的边界                        不是单词char的东西
    • [^>]*?任何字符,除了:'&gt;' (0次或更多次                        (匹配尽可能少的数量))
    • \b单词char(\ w)和。之间的边界                        不是单词char的东西
    • href=匹配href=
    • (分组并捕获到\ 1:
    • ['"]任何字符:''','''
    • )结束\ 1
    • (分组并捕获到\ 2:
    • [^'"]*任何字符,除了:''','''(0或                          更多次(匹配最多的金额                          可能的))
    • )结束\ 2
    • \1与capture \ 1
    • 匹配的内容
    • [^>]*?任何字符,除了:'&gt;' (0次或更多次                        (匹配尽可能少的数量))
    • >匹配>
    • )分组结束

答案 1 :(得分:2)

您可能需要this之类的内容:

(?<=\"\>).*(contact)?(?=\<\/)

您当前的正则表达式:

(?<=\"\>)(contact*?)(?=\<\/)

只会匹配:

<a href="contact">contact</a>

但也......

<a href="contact">contactttt</a>

甚至......

<a href="contact">contac</a>

由于*仅适用于其前面的t

我的正则表达式中的.*允许contact之前的任何字符。

答案 2 :(得分:2)

确保在匹配文本之前不会遇到另一个标记的最安全方法是:

(?<=\"\>)[^<]*(contact)

,其中

[^<]* 

表示:(一个不是&lt;的字符),尽可能多次

答案 3 :(得分:1)

如果您真的必须使用正则表达式来解析HTML标记,那么

(?<=>)[^<]*(contact)[^<]*(?=<\/)

这是a test。您的比赛是在第1组。

但是,请查看DOM functions,以便正确解析结构化文档。