2016-11-21 50 views

回答

2

使用字边界。

\B(?<word>@[a-zA-Z]\w+)\b 

https://www.regex101.com/r/ZvXQmI/4

有效地,\ B中在两个非单词字符之间的任意位置的两个单词字符之间以及任何位置匹配。 (要求排除域,其中@之前是一个单词字符)

瞧,42个步骤,结果相同。

+2

'\ b'确实不是必须的,因为'\ w +'会一直捕捉到字边界。 – 4castle

+0

@ 4castle的权利,这将其降低到37个步骤。 :-) – dognose

+0

你是对的@ 4castle。我删除了\ b并将其缩小到37步。非常感谢。 – Frenz

0

试试这个

(?<word>@[a-zA-Z]\w+)(<|\s+)? 

演示:https://www.regex101.com/r/ZvXQmI/3

如果你只是想与@开始的话,你可以使用更简单的东西

@[a-zA-Z]\w+ 
+0

这是不是让整个第一部分没有意义? – 4castle

+0

@ 4castle在某种程度上是。我删除它。 – Ibrahim

1

如果你只想匹配任何以@开头的字你可以做:

(@\w+) 

Demo

这就行了32级。 (如果您想了解更多特异性或用一个词边界\B(@\w+)

如果你想让你的正则表达式,在开始处匹配的话,你可以添加^为字符串的开头就像这样:

(?:>|\s+|^)(?<word>@[a-zA-Z]\w+)(<|\s+)? 

Demo

相关问题