在preg_match结果中删除了html注释分隔符

时间:2014-12-12 06:36:27

标签: php regex

我有这个PHP代码,它提取HTML注释的内容。 (我知道它不适用于不是连续字符串的注释,但没关系)。

preg_match_all('<!--\*\*(\w+)\*\*-->', $content, $matches)

返回

Array ( 
  [0] => Array ( [0] => !--**navigation**-- [1] => !--**form**-- [2] => !--**footer**-- ) 
  [1] => Array ( [0] => navigation          [1] => form          [2] => footer ) )

这很好,除了那个“&lt;”和“&gt;”已从第一个子数组中的匹配中删除字符。有什么方法可以保留它们吗?

1 个答案:

答案 0 :(得分:2)

问题不是使用正则表达式分隔符,请使用:

preg_match_all('~<!--\*\*(\w+)\*\*-->~', $content, $matches);

或者更好地使用s(DOTALL)标记与.*?匹配多行注释:

preg_match_all('~<!--\*\*(.*?)\*\*-->~s', $content, $matches);