我正在使用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
答案 0 :(得分:2)
所有这些
Users
应为matched
但如果字符串触及前面的@符号则不匹配。
为什么你不能只删除你的正面观察并使用以下内容?
/@(\w{1,20})\b/
注意:\w
匹配与letter
相同的任何(number
,underscore
或[a-zA-Z0-9_]
)以字边界\b
结尾,用户ID不会超过20
个字符。
请参阅Live demo
答案 1 :(得分:0)
试试这个正则表达式:/@([^@\s]+)/
,例如:
$string = preg_replace('/@([^@\s]+)/', '<a href="/$1">@$1</a> ', $string);
答案 2 :(得分:0)
如果你摆脱了正则表达式中的^
,它会成功识别你的所有四个例子。 ^
字符需要下一个字符@
才能开始该行。
答案 3 :(得分:0)