2016-11-21 179 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