匹配所有字符,直到具有正则表达式的特定单词(在本例中为html标记)

时间:2012-02-11 13:46:52

标签: php regex

  

可能重复:
  How to parse and process HTML with PHP?

我对正则表达式不太满意,但我找到了这段代码:

<?php
$string = "some text (a(b(c)d)e) more text";
if(preg_match("/\((?>[^()]+|(?R))*\)/",$string,$matches))
{
    echo "<pre>"; print_r($matches); echo "</pre>";
}
?>

我正在尝试更改正则表达式模式以匹配打开和关闭html标签而不是括号,但我无法弄清楚如何模仿"[^()]+"以便它匹配标签而不是括号。

这样做的目的是允许我创建一个新的html标签,无论标签嵌入其中多少次,我都可以访问其内容。
谢谢。

1 个答案:

答案 0 :(得分:0)

[^()]定义character class^表示“除了字符之外的所有内容”。因此,您的示例可以解释为除括号之外的所有内容。

如果您要解析html标记的内容,则需要[^<>]+

如果您有<div>Blah <a>foo</a>bar</div>之类的内容并且想要匹配Blah <a>foo</a>bar,则应使用~<div>(.+?)</div>~等正则表达式

在量词被称为greedy killer之后

?,它会确保regexp在“{1}}

”时“停止进食”

无论如何......在解析HTML时,您应该使用DOMxPath </div query()。这是谷歌的一些random tutorial