我希望匹配<tag>...</tag>
等匹配代码。我试过了正则表达式
~<([^>]+)>.*?</\1>~
但这失败了。当我使用尖括号内的确切文本时,表达式起作用,即
~<(tag)>.*?</tag>~
有效,但即便
~<(tag)>.*?</\1>~
失败。
我假设后面的引用在这里不起作用。
请有人帮帮我。感谢
PS:我没有用它来解析HTML。我知道我不应该。
答案 0 :(得分:9)
你没有显示你的PHP代码,但我猜你用双引号你的正则表达式。如果是这样,则反向引用\1
实际上会在到达PCRE之前转换为ASCII字符☺
。 (所有\123
序列都被解释为C字符串octal在那里转义。)
答案 1 :(得分:2)
它对我有用......
$str = '<a></a>';
var_dump(preg_match('~<([^>]+)>.*?</\1>~', $str)); // int(1)
另外,您考虑过XML parser吗?否则它不会像这样的HTML片段......
<a title="Is 4 > 6?"></a>
答案 2 :(得分:1)
除了使用正则表达式尝试匹配标记语言并不总是一个好主意之外,你的正则表达式看起来还不错。也许你使用它错了?
if (preg_match('~<([^>]+)>.*?</\1>~', $subject, $regs)) {
$result = $regs[0];
} else {
$result = "";
}
应该有用。
答案 3 :(得分:0)
在模式中使用单引号
preg_match_all('/(sens|respons)e and \1ibility/', "sense and sensibility", $matches);
print_r($matches);