整个单词后RegEx完成

时间:2014-07-21 22:46:41

标签: php regex preg-replace

所以我遇到了问题。使用我的RegEx代码。所以我尝试建立一个通知系统,并希望使其更具视觉效果。我之前编写的代码的问题是,它可以工作,但只要你有空间。如果你没有它,它将无法正常工作。因此,'@test '可以正常工作,但不会'@test''@test.',如何在找到该单词后停止RegEx?

$str = preg_replace("/@(.*?) /", '<span class="label label-default">$1</span>', $str);

3 个答案:

答案 0 :(得分:2)

要替换不包含任何空格的单个字符串,请使用

@\S+

如果您只想允许字母,请使用:

@[a-zA-Z]+

如果您还想允许数字,请使用:

@[a-zA-Z0-9]+

根据您喜欢的选项,您的PHP会变成:

$str = preg_replace("/@([a-zA-Z]+)/", '<span class="label label-default">$1</span>', $str);

<强>解释

  • \S表示一个不是空白字符的字符
  • [a-zA-Z]是一个字符类,允许范围a-zA-Z
  • 中的任何字符
  • +量词表示前一个令牌或组的“一个或多个”

答案 1 :(得分:1)

  

我已经解决了,它是否有效,但只要你有空间。如果你没有它将无法正常工作

因为你的正则表达式模式中有额外的空格

/@(.*?) /
      ^^^

  

如何在找到单词后停止RegEx?

您可以使用/@([a-zA-Z]+)/仅匹配大写和小写字母。

答案 2 :(得分:1)

为什么不搜索&#34;不是空格&#34;多次?

/@[^ ]+/

此外,*表示0到无穷大时间。因此,?

中不需要.*?