匹配之前发生的事情

时间:2011-12-20 15:21:02

标签: php regex match

我需要制作一个匹配标签的正则表达式,如下所示:

<tag>
    <b> Match Me </b>
</other-closing-tag>

它应仅匹配同一标记之间的内容。所以结果应该是这样的:

1 match:
<b> Match Me </b>
Match me

我需要在PHP中完成它,但我认为这不重要......

1 个答案:

答案 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
  )
)