【问题标题】:PHP Use preg_replace for replacing space with &nbspPHP 使用 preg_replace 用 &nbsp 替换空间
【发布时间】:2012-11-10 18:50:31
【问题描述】:

如何使用preg_replace()将不在<>内的所有空间更改为&nbsp

$var="<  >< >Association football< ><  >"

$var="<  ><  >Association&nbspfootball<  ><  >"

使用preg_replace() 执行此操作的正则表达式是什么?

【问题讨论】:

  • Martin,在使用 Stack Overflow 之前,请花一些时间在 Google 上研究您的问题。你今天问了很多背靠背的问题,你自己只要稍微研究一下就可以很容易地回答。
  • 很抱歉,如果您不想回答,因为您不必回答,stackoverflow 是一个用于提问的网站。我认为这是一个好问题,我不明白你的批评。这是一个好问题,你应该看到响应分数
  • 如果这个 '/ [] (? = [^ ] * (:
  • 是的,@downvoter - 你愿意发表评论吗? :)

标签: php regex string replace preg-replace


【解决方案1】:

这与question just asked 非常相似。基本上,您需要使用lookahead,以确保您可以在下一个&gt; 之前找到&lt; 或字符串的结尾:

$var = preg_replace('/[ ](?=[^<>]*(?:<|$))/', '&nbsp', $var);

Working demo

Some more general information about lookarounds.

【讨论】:

    【解决方案2】:
    $var = preg_replace('/[ ](?=[^>]*(?:<|$))/', '&nbsp', $var);
    

    请参阅this efficiency demo 将此解决方案与m.buettner 发布的解决方案进行比较。

    【讨论】:

    • 这很有趣。你知道为什么会这样吗?
    • 第二个通常会导致更长的回溯(除非 - 看起来 - PCRE 非常聪明)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多