我有以下文字:
<!--:en-->
<!--:-->
我想构建一个模式以从字符串(PHP)中提取它。我试着用:
<!--:[a-z]{2}-->( \r\n\s)<!--:-->
但它不起作用,有人知道为什么或可以帮助我吗?
答案 0 :(得分:3)
You probably don't want to use regex to parse XML/HTML.
那对于很多reasons。
相反,通常您更愿意使用tools made for this specific task进行解析。
无论如何,你需要的更像是:
( |\s)*
答案 1 :(得分:1)
您需要转义特殊字符,例如连字符。试试这个:
/<\!\-{2}\:[a-z]{2}\-\->(( |\s)*)<\!\-{2}\:\-{2}>/
答案 2 :(得分:1)
如果我正确理解了您的问题,您必须匹配整个文本,包含评论。
所以,严格来说你的具体问题,我会用这样的东西:
$s = "<!--:en-->
<!--:-->";
$a = array();
preg_match('/<!--:[a-z]{2}--> \\s+<!--:-->/', $s, $a);
for ($i = 0; $i < count($a); $i++) {
var_dump(htmlentities($a[$i]));
}
一般来说,我不怀疑你是否应该使用正则表达式解析HTML,但是请注意,当他说用现实表达式逼真地解析HTML时,Colin是正确的非常难(读“几乎不可能”),正如他所表明的职位所述。