1

我有以下文字:

<!--:en-->&nbsp;

<!--:-->

我想构造一个模式来从字符串(PHP)中提取它。我尝试:

<!--:[a-z]{2}-->(&nbsp;\r\n\s)<!--:-->

但它不起作用,有人知道为什么或可以帮助我吗?

4

3 回答 3

3

您可能不想使用正则表达式来解析 XML/HTML。

这有很多原因

相反,您通常更愿意使用为该特定任务制作的工具进行解析。


无论如何,您在这里需要的更像是:

(&nbsp;|\s)*
于 2012-04-11T14:40:02.857 回答
1

您需要转义特殊字符,例如连字符。尝试这个:

/<\!\-{2}\:[a-z]{2}\-\->((&nbsp;|\s)*)<\!\-{2}\:\-{2}>/
于 2012-04-11T14:42:42.120 回答
1

如果我正确理解了你的问题,你必须匹配整个文本,包括评论。

所以,严格来说你的具体问题,我会使用类似的东西:

$s = "<!--:en-->&nbsp; 

<!--:-->";

$a = array();
preg_match('/<!--:[a-z]{2}-->&nbsp;\\s+<!--:-->/', $s, $a);

for ($i = 0; $i < count($a); $i++) {
  var_dump(htmlentities($a[$i]));
}

一般来说,我不会质疑你是否应该使用正则表达式解析 HTML,但是请注意,当 Colin 说用正则表达式实际解析 HTML 可能非常困难(读作“几乎不可能”)时,他是对的,因为他表示状态的帖子。

于 2012-04-11T16:20:58.937 回答