Php I';I’我想把一个不包含在方括号内的以@开头的单词进行预匹配

Php I';I’我想把一个不包含在方括号内的以@开头的单词进行预匹配,php,regex,preg-match,preg-replace-callback,Php,Regex,Preg Match,Preg Replace Callback,也就是说,alice应该匹配,但是bob不应该在下面的代码中匹配 Hello @alice and [@bob](...) 我可以用以下简单的正则表达式来匹配名称:/\@([\w]+)/ 有人知道如何使正则表达式与bob不匹配吗?组索引1包含您想要的字符 在前面使用负数 @(?![^\[\]]*])(\w+) 或 通过改造, \[.*?\]|@(\w+) 或 通过PCRE动词 如果我理解最后一行,正则表达式将匹配[]s中的任何内容,并从本质上消除它,然后我们将字符串的其余部分匹配为以@

也就是说,alice应该匹配,但是bob不应该在下面的代码中匹配

Hello @alice and [@bob](...)
我可以用以下简单的正则表达式来匹配名称:
/\@([\w]+)/


有人知道如何使正则表达式与bob不匹配吗?

组索引1包含您想要的字符

在前面使用负数

@(?![^\[\]]*])(\w+)

通过改造,

\[.*?\]|@(\w+)

通过PCRE动词


如果我理解最后一行,正则表达式将匹配
[]
s中的任何内容,并从本质上消除它,然后我们将字符串的其余部分匹配为以
@
开头的单词。
\[.*?\](*SKIP)(*F)|@(\w+)