我需要制作一个匹配标签的正则表达式,如下所示:
<tag>
<b> Match Me </b>
</other-closing-tag>
它应仅匹配同一标记之间的内容。所以结果应该是这样的:
1 match:
<b> Match Me </b>
Match me
我需要在PHP中完成它,但我认为这不重要......
答案 0 :(得分:2)
使用正则表达式反向引用,您可以在以下链接中阅读更多信息。
虽然使用正则表达式解析html绝对不是一个好主意,但我会假装您将使用此信息来解决完全不同的问题。 ; - )
在下面我们说我们的结束标记的内容应该与我们的第一个组([^>]+)
匹配的内容相同,方法是在结束标记中使用\1
。
$data =<<<EOT
<awesome-tag> match-me </awesome-tag>
<error-tag> match-me </err0r-tag>
<super-tag> match-me </super-tag>
<error-tag> match-me </err0r-tag>
<awesome-tag> match-me </awesome-tag>
EOT;
preg_match_all ('/<([^>]+)>.*?match-me.*?<\/\1>/s', $data, $matches);
print_r ($matches);
输出
Array
(
[0] => Array
(
[0] => <awesome-tag> match-me </awesome-tag>
[1] => <super-tag> match-me </super-tag>
[2] => <awesome-tag> match-me </awesome-tag>
)
[1] => Array
(
[0] => awesome-tag
[1] => super-tag
[2] => awesome-tag
)
)