一个困扰我的简单正则表达式

时间:2012-04-11 14:38:06

标签: php regex

我有以下文字:

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

<!--:-->

我想构建一个模式以从字符串(PHP)中提取它。我试着用:

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

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

3 个答案:

答案 0 :(得分:3)

You probably don't want to use regex to parse XML/HTML.

那对于很多reasons

相反,通常您更愿意使用tools made for this specific task进行解析。


无论如何,你需要的更像是:

(&nbsp;|\s)*

答案 1 :(得分:1)

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

/<\!\-{2}\:[a-z]{2}\-\->((&nbsp;|\s)*)<\!\-{2}\:\-{2}>/

答案 2 :(得分: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,但是请注意,当他说用现实表达式逼真地解析HTML时,Colin是正确的非常难(读“几乎不可能”),正如他所表明的职位所述。