2011-07-02 205 views
0

我需要以這種方式查找由'@'字符前綴的單詞的所有匹配項:@soemthing。正則表達式:如何匹配字符串中@something的所有匹配項

例如:

string input = "@alias1 is my first email but @alias2.com and [email protected] along with @alias4 are disabled"

我只想匹配@ alias1和@ alias4但不@ alias.com或電子郵件@別名3

感謝

+2

您使用的是什麼正則表達式引擎? Perl的?蟒蛇? C#? grep的? –

+1

您使用哪種語言?它有所作爲! – ysth

+0

哪些字符應該在別名中有效?例如,是否允許「@ my_alias」? –

回答

2

這應該工作...

(?<=^|\s)@\w+(?=\s|$) 

爲了解釋,(?<=^|\s)是一個積極的向後看,確保你是eit她在字符串的開頭,或者在匹配之前有一個空白字符。然後(?=\s|$)是一個積極的向前看,確保匹配後面是空格或字符串的結尾。

+0

這個答案是完美的。不幸的是,我不能將它投票爲系統的新手,我的聲望仍然低於限制。非常感謝。它像一個魅力工作! –

+0

@ user825654 - 不客氣。你可能無法贊成,但我認爲你可以接受這個答案。只需點擊大號複選標記。 –

0

使用以下命令:\[email protected]\w+\b

你沒有指定編程語言,所以我假設C#。然而我不知道C#是否支持「\ b」。

編輯:

我公司將採取Justin的意見和建議,而不是\[email protected]\w+(?=["'\s]|$)

+1

對不起,很不禮貌,但爲什麼你會假設一種語言,然後給出一個可能不適用於該語言的答案?爲什麼不只是假設它的工作語言?這沒有意義... – rockerest

+0

你測試過了嗎?我不認爲它是有效的 – Bohemian

+0

'\ b'最後不會起作用,因爲它認爲'this.that'在句點上有一個字邊界。 –

2

您可以使用下面的正則表達式:

/(?:^|\W)@[\w]+(?:\s|$)/ 
+0

這將匹配'@@ alias',這可能會或可能不會被允許用於OP。 –

+0

也會匹配'@ this_alias'。問題不清楚,但它看起來像下劃線可能不是一個允許的匹配 – Bohemian

1

我這樣做:(?<=(^|\s))@[a-zA-Z]+(?=(\s|$))

此正則表達式說「@後面的字母,而是由空格之前或線的開始,下一個字符是空格還是行尾「。

雖然你的例子不指定,如果你願意接受下劃線字符,例如@some_thing,那麼你就可以簡單地\w

+0

我不認爲lookaheads「保持簡單」。 ; P –

+0

fiar評論 - 刪除「簡單」 – Bohemian

+0

\ w是[a-zA-Z_] –

-2

取代[a-zA-Z]嘗試用正則表達式:

@\w+ 
+1

這將匹配@ name.com =失敗 – Bohemian

+0

@波希米亞:編輯:) –

+0

仍然無法正常工作。在這裏測試它:http://www.regular-expressions.info/javascriptexample.html – Bohemian