我已经搜索过这个但找不到适合我的解决方案。 我需要正则表达式模式,它将匹配除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,那就更好了。
答案 0 :(得分:3)
正如您可能知道的那样,正则表达式不是一个很好的选择(这里的一般建议是使用Dom解析器)。
但是,如果您需要快速正则表达式解决方案,请使用此方法(请参阅demo):
<[^>]*>(*SKIP)(*F)|[^<]+
这是如何工作的,左边<[^>]*>
匹配完成<tags>
,然后(*SKIP)(*F)
导致正则表达式失败,引擎前进到后面的字符串中的位置匹配标记的最后一个字符。
这是对exclude patterns from matches的一般技术的应用(阅读链接的问题以获取更多细节)。
如果您不想让匹配跨越多行,请将\r\n
添加到匹配的否定字符类中,如下所示:
<[^>]*>(*SKIP)(*F)|[^<\r\n]+
答案 1 :(得分:1)
答案 2 :(得分:-3)
请使用PHP DOMDocument类来解析XML内容: