我发现preg_match()
和不推荐的ereg()
的语法不同
例如:
我以为
preg_match('/^<div>(.*)</div>$/', $content);
与
相同ereg('^<div>(.*)</div>$', $content);
但我错了。 preg_match()
不包含像ereg()
这样的输入的特殊字符。
所以我开始使用这种语法:
preg_match('/^<div>([^<]*)</div>$/', $content);
但它与我需要的不完全相同。
有人可以建议我如何解决这个问题,而不使用已弃用的函数吗?
答案 0 :(得分:1)
对于解析HTML,我建议阅读this question并选择内置的PHP扩展。
如果出于某种原因,需要或想要使用RegEx来执行此操作,您应该知道:
preg_match()
是一个贪心小虫子,它会尝试吃掉你的任何 (.*)
,直到它生病了(意思是它)命中递归或回溯限制)。您可以使用 U
修饰符 1 更改此内容。
引擎预计会输入单行。您可以使用 m
或 s
修饰符 1 更改此内容。
使用您的'而不是&lt;角色'([^<]*)
hack做得很好,因为它会强制引擎在第一个&lt; 字符处停止,但仅当 时才会工作 <div>
内不包含其他标记!
ref: 1 PCRE Pattern Modifiers