忽略空匹配 php 正则表达式

Ignore empty match php Regex

我需要替换标签中的所有文本(这不是代码)。 所以我正在使用:

preg_replace('/<.*?>([^<]*)<\/.*?>/', "new_text", $str)

我得到了 result。但我需要删除所有空的和只有空白的匹配项或从搜索中删除它们。 我该怎么做?

Before:

preg_replace('/<.*?>([^<]*)<\/.*?>/', "new_text", $str)

After:

Use +: preg_replace('/<.*?>([^<]+)<\/.*?>/', "new_text", $str)

我会建议这样的事情:

<.*?>((?=[^<]*\S.*?<)([^<]+))<\/.*?>

或者,如果您想在匹配中包含换行符:

(<.*?>)(?=[^<]*\S.*[<\n])([^<]+)(<\/.*?>)

Here's a demo

它与您的 awnser 类似,将您的匹配组替换为 [^<]+ 以确保至少返回一个字符

但是,为了确保不会匹配只有空格的字符串,在开始标记匹配之后添加了一个前瞻:

(?=[^<]*\S.*?<)

这可确保在两个标签之间至少有一个字符不是空格。

more info on lookaheads