忽略空匹配 php 正则表达式
Ignore empty match php Regex
我需要替换标签中的所有文本(这不是代码)。
所以我正在使用:
preg_replace('/<.*?>([^<]*)<\/.*?>/', "new_text", $str)
我得到了 result。但我需要删除所有空的和只有空白的匹配项或从搜索中删除它们。
我该怎么做?
preg_replace('/<.*?>([^<]*)<\/.*?>/', "new_text", $str)
Use +: preg_replace('/<.*?>([^<]+)<\/.*?>/', "new_text", $str)
我会建议这样的事情:
<.*?>((?=[^<]*\S.*?<)([^<]+))<\/.*?>
或者,如果您想在匹配中包含换行符:
(<.*?>)(?=[^<]*\S.*[<\n])([^<]+)(<\/.*?>)
它与您的 awnser 类似,将您的匹配组替换为 [^<]+
以确保至少返回一个字符
但是,为了确保不会匹配只有空格的字符串,在开始标记匹配之后添加了一个前瞻:
(?=[^<]*\S.*?<)
这可确保在两个标签之间至少有一个字符不是空格。
我需要替换标签中的所有文本(这不是代码)。 所以我正在使用:
preg_replace('/<.*?>([^<]*)<\/.*?>/', "new_text", $str)
我得到了 result。但我需要删除所有空的和只有空白的匹配项或从搜索中删除它们。 我该怎么做?
preg_replace('/<.*?>([^<]*)<\/.*?>/', "new_text", $str)
Use +: preg_replace('/<.*?>([^<]+)<\/.*?>/', "new_text", $str)
我会建议这样的事情:
<.*?>((?=[^<]*\S.*?<)([^<]+))<\/.*?>
或者,如果您想在匹配中包含换行符:
(<.*?>)(?=[^<]*\S.*[<\n])([^<]+)(<\/.*?>)
它与您的 awnser 类似,将您的匹配组替换为 [^<]+
以确保至少返回一个字符
但是,为了确保不会匹配只有空格的字符串,在开始标记匹配之后添加了一个前瞻:
(?=[^<]*\S.*?<)
这可确保在两个标签之间至少有一个字符不是空格。