为什么这个正则表达式不返回任何内容?

时间:2011-11-02 13:43:29

标签: php regex

preg_match_all('/<p>.*:</p>/gm', $content, $matches);
var_dump($matches); //ouput is NULL

我想要这样的内容:<p>The Ideal Candidate:</p>匹配而不是<p>Some more text</p>。要求是它必须包含<p>标记,后跟一些文字,最后它必须包含:,后跟p标记的末尾(</p>)。

注意:我尝试转义结束p标记,但它仍然无法正常工作。 更新的代码:

preg_match_all('/<p>.*:<\/p>/gm', "<p>The Ideal Candidate:</p>", $matches);

2 个答案:

答案 0 :(得分:2)

转义/或使用其他分隔符

 /<p>(.*?:)<\/p>/m

 #<p>(.*?:)</p>#m

测试:

preg_match_all('#<p>(.*?:)</p>#m', "<p>The Ideal Candidate:</p>", $m);
print_r($m)

<强>输出:

Array
(
    [0] => Array
        (
            [0] => <p>The Ideal Candidate:</p>
        )

    [1] => Array
        (
            [0] => The Ideal Candidate:
        )

)

答案 1 :(得分:2)

g不是有效修饰符,请参阅PHP: Pattern modifiers。您应该密切关注PHP问题的警告。运行时

preg_match_all("/<p>.*:<\/p>/gm", "<p>The Ideal Candidate:</p>", $matches);
print_r($matches);

我得到了

  

警告:preg_match_all():第1行命令行代码中的未知修饰符“g

而没有g修饰符的同一行产生

Array
(
    [0] => Array
        (
            [0] => <p>The Ideal Candidate:</p>
        )
)