php preg_match和ereg语法的区别

时间:2013-01-10 10:40:18

标签: php regex preg-match deprecated ereg

我发现preg_match()和不推荐的ereg()的语法不同 例如:

我以为

preg_match('/^<div>(.*)</div>$/', $content);

相同
ereg('^<div>(.*)</div>$', $content);

但我错了。 preg_match()不包含像ereg()这样的输入的特殊字符。

所以我开始使用这种语法:

preg_match('/^<div>([^<]*)</div>$/', $content);

但它与我需要的不完全相同。

有人可以建议我如何解决这个问题,而不使用已弃用的函数吗?

1 个答案:

答案 0 :(得分:1)

对于解析HTML,我建议阅读this question并选择内置的PHP扩展。

如果出于某种原因,需要想要使用RegEx来执行此操作,您应该知道:

  • preg_match()是一个贪心小虫子,它会尝试吃掉你的任何 (.*),直到它生病了(意思是它)命中递归或回溯限制)。您可以使用 U 修饰符 1 更改此内容。

  • 引擎预计会输入单行。您可以使用 m s 修饰符 1 更改此内容。

  • 使用您的'而不是&lt;角色'([^<]*) hack做得很好,因为它会强制引擎在第一个&lt; 字符处停止,但仅当 时才会工作 <div>内不包含其他标记!

ref: 1 PCRE Pattern Modifiers