【问题标题】:How can I get preg_match_all to match angle brackets?如何让 preg_match_all 匹配尖括号?
【发布时间】:2012-01-06 14:50:10
【问题描述】:

我知道这可能是一个愚蠢的问题,但我一直在努力弄清楚如何让 preg_match_all 做我想做的事......

我想匹配看起来像 的字符串 另外,我想以一种懒惰的方式来做这件事,所以如果 a 有一个类似的字符串

$myString = '<[someText]> blah blah blah <[someOtherText]> lala [doNotMatchThis] ';

我想要 2 个匹配项:'' 和 '' 而不是单个匹配项 ' blah blah blah '

我正在尝试将其与以下模式匹配

$pattern = '<\[.+?\]>';

但由于某种原因,我得到了 3 个匹配项:[someText]、[someOtherText] 和 [doNotMatchThis]

这让我相信由于某种原因尖括号会干扰,我觉得这很奇怪,因为它们不应该是元字符。

我做错了什么?

【问题讨论】:

    标签: php regex preg-match-all


    【解决方案1】:

    您的模式需要分隔符(现在 &lt;&gt; 被“视为”为分隔符)。

    试试这个:

    $pattern = '/<\[.+?\]>/';
    

    以下内容:

    $myString = '<[someText]> blah blah blah <[someOtherText]> lala [doNotMatchThis] ';
    $pattern = '/<\[.+?\]>/';
    preg_match_all($pattern, $myString, $matches);
    print_r($matches);
    

    将打印:

    Array
    (
        [0] => Array
            (
                [0] => <[someText]>
                [1] => <[someOtherText]>
            )
    
    )
    

    【讨论】:

      【解决方案2】:

      您缺少正确的分隔符(在这种情况下,您的 &lt; &gt; 被视为分隔符)

      $pattern = '~<\[.+?\]>~';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        相关资源
        最近更新 更多