PHP中的正则表达式将用户名更改为漂亮的链接

时间:2013-12-27 17:14:01

标签: php regex

我正在使用PHP正则表达式将用户名更改为文本中的漂亮链接 首先,它寻找@ sign
其次,它检查@ sign是否有触及它的用户ID,E.G。 @User10
第三,它确保用户id在1到20个字符之间,
第四,它使链接变得漂亮。

这是我的正则表达式

/(?<=^|\s|[([])\@([a-zA-Z0-9_]{1,20})/

这个正则表达式适用于这些文本示例

@User1 This is a test string @User2
@User3

但它在这些文本示例中不起作用

<br>@User1 Hello John@User2

所有这些用户都应匹配,但如果字符串触及前面的@ sign,则不匹配。

我在这里设置了一个在线正则表达式示例。 http://regex101.com/r/zK9kC4

4 个答案:

答案 0 :(得分:2)

  

所有这些Users应为matched但如果字符串触及前面的@符号则不匹配。

为什么你不能只删除你的正面观察并使用以下内容?

/@(\w{1,20})\b/

注意\w匹配与letter相同的任何(numberunderscore[a-zA-Z0-9_])以字边界\b结尾,用户ID不会超过20个字符。

请参阅Live demo

答案 1 :(得分:0)

试试这个正则表达式:/@([^@\s]+)/,例如:

$string = preg_replace('/@([^@\s]+)/', '<a href="/$1">@$1</a> ', $string);

在线演示:http://regex101.com/r/iD1oN1

答案 2 :(得分:0)

如果你摆脱了正则表达式中的^,它会成功识别你的所有四个例子。 ^字符需要下一个字符@才能开始该行。

答案 3 :(得分:0)

我在http://gskinner.com/RegExr/

上尝试了这个表达式
/@([a-zA-Z0-9_]{1,20})/

它符合您为User-Id提供的所有条件。