用于@ [提及]的PHP正则表达式

Max*_*Max 0 php regex

有人能帮我吗:

$pattern = "/^(?:[a-zA-Z0-9?. ]?)+@([a-zA-Z0-9]+)(.+)?$/";
$str = "Hey @[14256] hey how are you?";
preg_match($pattern, $title, $matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)

如果我删除@提及的括号(@ [14256]),打印结果可以正常工作,但我无法弄清楚如何使用括号来处理正则表达式.所以我将在我的数组中得到结果14256.

Eri*_*ric 6

您需要在正则表达式中包含括号:

"/^(?:[a-zA-Z0-9?. ]?)+@(\\[?[a-zA-Z0-9]+\\]?)(.+)?$/"
Run Code Online (Sandbox Code Playgroud)

注意\\[?并且\\]?我已经添加了; 那些将匹配[]字符,如果没有,也会匹配[].

请记住,以上将匹配@[14256@14256].如果你只想匹配一个或另一个,你需要做一点不同.

"/^(?:[a-zA-Z0-9?. ]?)+@([a-zA-Z0-9]+|\\[[a-zA-Z0-9]+\\])(.+)?$/"
Run Code Online (Sandbox Code Playgroud)

这将匹配EITHER @aA1 @[aA1],但不是我上面显示的坏例子.

最后一件事要包括:这个正则表达式只匹配一个实例@[mention].如果你想匹配它的所有实例(例如" 嘿@ 123,这些天如何@ 456? "),请使用以下内容preg_match_all():

"/@([a-zA-Z0-9]+|\\[[a-zA-Z0-9]+\\])/"
Run Code Online (Sandbox Code Playgroud)

然后$matches[1]将包含123456.