正则表达式 - 匹配HTML标签以外的所有内容

时间:2014-06-16 13:07:45

标签: php regex

我已经搜索过这个但找不到适合我的解决方案。 我需要正则表达式模式,它将匹配除html标签之外的所有文本,所以我可以使它cyrilic(这显然会破坏整个html =))

所以,例如:

<p>text1</p>
<p>text2 <span class="theClass">text3</span></p>

我需要匹配text1,text2和text3,所以像

preg_match_all("/pattern/", $text, $matches)

然后我会迭代匹配,或者如果可以用preg_replace完成,用textA / B / C替换text1 / 2/3,那就更好了。

3 个答案:

答案 0 :(得分:3)

正如您可能知道的那样,正则表达式不是一个很好的选择(这里的一般建议是使用Dom解析器)。

但是,如果您需要快速正则表达式解决方案,请使用此方法(请参阅demo):

<[^>]*>(*SKIP)(*F)|[^<]+

这是如何工作的,左边<[^>]*>匹配完成<tags>,然后(*SKIP)(*F)导致正则表达式失败,引擎前进到后面的字符串中的位置匹配标记的最后一个字符。

这是对exclude patterns from matches的一般技术的应用(阅读链接的问题以获取更多细节)。

如果您不想让匹配跨越多行,请将\r\n添加到匹配的否定字符类中,如下所示:

<[^>]*>(*SKIP)(*F)|[^<\r\n]+

答案 1 :(得分:1)

这个RegEx怎么样:

/(?<=>)[\w\s]+(?=<)/g

<强> Online Demo

答案 2 :(得分:-3)

请使用PHP DOMDocument类来解析XML内容:

PHP Doc