使用正则表达式捕获时如何忽略单词?

时间:2013-12-27 07:33:56

标签: php html regex special-characters

我有这个字符串:

$text = "What's your #name ?"

我有这个代码捕获'name'和'039':

preg_replace("/\B#(\w+)/", "<a href='url'>#$1</a>", $text);

关于如何捕捉'名字'而不是'039'的任何想法?

2 个答案:

答案 0 :(得分:1)

使用否定的lookbehind:

echo preg_replace("/(?<!\S)#(\w+)/", "<a href='url'>#$1</a>", $text);

正则表达式尸检:

  • (?<!\S) - 负面观察 - 断言#前面没有非空格字符
  • # - 字面匹配#字符
  • (\w+) - 首次捕获群组

Regex101 demo.

答案 1 :(得分:0)

您可以使用[A-Za-z]+代替\w+