忽略空匹配php正则表达式

时间:2016-06-14 12:04:08

标签: php regex preg-replace removing-whitespace

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

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

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

2 个答案:

答案 0 :(得分:1)

我会建议这样的事情:

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

或者,如果您想在匹配中添加换行符:

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

Here's a demo

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

但是,为了确保只有空格才能匹配,在开始标记匹配后会添加一个前瞻:

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

这确保了两个标签之间至少有一个字符不是空白。

more info on lookaheads

答案 1 :(得分:0)

Before

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

After:

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