【问题标题】:Ignore empty match php Regex忽略空匹配php正则表达式
【发布时间】:2016-06-15 19:41:42
【问题描述】:

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

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

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

【问题讨论】:

  • 使用+:preg_replace('/&lt;.*?&gt;([^&lt;]+)&lt;\/.*?&gt;/', "new_text", $str)
  • @Wiktor Stribiżew 是的!谢谢!
  • 使用+ 将删除空匹配项,但不会删除仅空格匹配项。

标签: php regex preg-replace removing-whitespace


【解决方案1】:

我会建议这样的事情:

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

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

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

Here's a demo

类似于您的 awnser 将匹配组替换为 [^&lt;]+ 以确保至少返回一个字符

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

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

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

more info on lookaheads

【讨论】:

  • 请提示,我可以添加什么来突出显示this type的文本?
  • 就这样(?=[^&lt;]*\S\s*?&lt;)?
  • 但我只需要文本(没有制表符和空格)
【解决方案2】:

Before:

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

After:

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

【讨论】:

    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2020-08-06
    • 2014-04-17
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多