【问题标题】:Simple RegEx PHP简单的正则表达式 PHP
【发布时间】:2009-02-26 17:20:54
【问题描述】:

由于我对正则表达式完全没用,而且这在过去半小时里一直困扰着我,我想我会把它贴在这里,因为它可能很简单。

<a href="/folder/files/hey/">hey.exe</a>
<a href="/folder/files/hey2/">hey2.dll</a>
<a href="/folder/files/pomp/">pomp.jpg</a>

在 PHP 中,我需要提取 &lt;a&gt; 标签示例之间的内容:

hey.exe
hey2.dll
pomp.jpg

【问题讨论】:

    标签: php regex


    【解决方案1】:

    避免使用 '.*',即使你让它变得不贪心,直到你对 RegEx 有更多的练习。我认为对您来说一个好的解决方案是:

    '/<a[^>]+>([^<]+)<\/a>/i'
    

    注意 '/' 分隔符 - 您必须在 PHP 中使用 preg 的正则表达式函数套件。它看起来像这样:

    preg_match_all($pattern, $string, $matches);
    // matches get stored in '$matches' variable as an array
    // matches in between the <a></a> tags will be in $matches[1]
    print_r($matches);
    

    【讨论】:

    • +1 用于推荐反对 (.*) 并改为使用专有字符类。
    【解决方案2】:

    这似乎有效:

    $pattern = '/<a.*?>(.*?)<\/a>/';
    

    【讨论】:

      【解决方案3】:

      &lt;a href="[^"]*"&gt;([^&lt;]*)&lt;/a&gt;

      【讨论】:

        【解决方案4】:

        我发现this regular expression tester 很有帮助。

        【讨论】:

        【解决方案5】:

        这是一个非常简单的:

        <a.*>(.*)</a>
        

        但是,如果您在同一行中有多个匹配项,则应小心,例如

        <a href="/folder/hey">hey.exe</a><a href="/folder/hey2/">hey2.dll</a>
        

        在这种情况下,正确的正则表达式应该是:

        <a.*?>(.*?)</a>
        

        注意“?”在“*”量词之后。默认情况下,量词是贪婪的,这意味着它们会吃掉尽可能多的字符(这意味着在本例中它们只会返回“hey2.dll”)。通过附加引号,您可以使它们变得不贪婪,这应该更好地满足您的需求。

        【讨论】:

          猜你喜欢
          • 2011-02-09
          • 1970-01-01
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          • 2016-01-17
          • 2021-04-30
          • 1970-01-01
          相关资源
          最近更新 更多