我对正则表达式不太满意,但我找到了这段代码:
<?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标签,无论标签嵌入其中多少次,我都可以访问其内容。
谢谢。
答案 0 :(得分:0)
[^()]
定义character class。 ^
表示“除了字符之外的所有内容”。因此,您的示例可以解释为除括号之外的所有内容。
如果您要解析html标记的内容,则需要[^<>]+
。
如果您有<div>Blah <a>foo</a>bar</div>
之类的内容并且想要匹配Blah <a>foo</a>bar
,则应使用~<div>(.+?)</div>~
等正则表达式
?
,它会确保regexp在“{1}}
无论如何......在解析HTML时,您应该使用DOM和xPath
</div
query()
。这是谷歌的一些random tutorial。