2012-03-25 72 views
0

我在學習正則表達式,我無法理解Java中的分組。 目前我正則表達式表達正則表達式Java第一個字母不包含在正確的組中?

([^:]?)(?![email])(\w+[\. ]?\w+)\ ?\@[\. ]?(\w+\.?\w+)\.edu 

我的目標是,有各種形式的提取電子郵件地址。不以這方面的工作線串的一個例子是:

To get on the vcode mailing list, please email [email protected] 

我表達正確的字符串,但

group(1) = e 
group(2) = ngler 

比賽我要的是

group(2) = engler 

它的工作原理對於其他字符串,如href =「mailto:[email protected]」>

感謝您花時間幫助我出。 順便說一下,我使用http://www.regexplanet.com/advanced/java/index.html來幫助我,它將正則表達式轉換爲java理解並向您顯示分組的那些表達式。

謝謝您是Affe

答:([^:]?)(?!(電子郵件))([] \ w + \ W +?)\ B \ b \ \ @? ]?(\ w +。?\ w +)。edu,我不知道它被人物對待,謝謝。

+0

究竟是什麼規則(抽象地)決定是否應該提取的東西?剛開始閱讀你的正則表達式,即使是第一部分(選項非冒號?)讓我想知道你的標準是什麼。 – 2012-03-25 23:36:27

+0

單詞「email」的方括號將使你的正則表達式捕獲集合{e,m,a,i,l}中的一個字符。我不認爲這是你的意圖。 – phatfingers 2012-03-25 23:42:56

+0

@Ben Lee我試圖提取任何包含任何抽象形式的電子郵件的字符串。比如機器人技術jks;斯坦福; edu,我應該能夠在一個組中提取jks,在另一個組中提供robotics.stanford。他們有很多奇怪的形式,我正在參加一門課程。如果你有任何建議,我可以提高我的正則表達式的自由分享,因爲我仍然是新的和學習。 – Miles 2012-03-26 00:14:34

回答

1

表達式[email]是一個字符類。它匹配字母e,m,a,i或l中的任何一個。它不符合「電子郵件」一詞。這只是沒有括號的電子郵件。這就是爲什麼它會吸引工程師。因爲你要斷言字符email

([^:]?)(?<=email\s)(\w+[\. ]?\w+)\ ?\@[\. ]?(\w+\.?\w+)\.edu 

我已經改變了負向前查找到正回顧後(中間有空格 - 我加了這個\s)應:

+0

@Miles請注意,如果您只是刪除括號'[]',則您的正則表達式在整個比賽中也會包含電子郵件。這可能對你需要的東西沒有問題,但是如果你想刪除它,請檢查我的答案,下面應該解決它。 – Robbie 2012-03-25 23:59:07

1

試試這個正則表達式,而不是在比賽之前。

我也刪除[]支架從email,因爲這是從匹配字電子郵件的任何字符,並破壞你的團體(如由@Affe指出並@phatfingers)

0

捕捉E-一個相當不錯的說明電子郵件地址與正則表達式可以在這裏找到:How to Find or Validate an Email Address

解析電子郵件地址是一個相當複雜的問題,學習正則表達式。您可能會從幾個更簡單的問題開始,這些問題的規則可以更容易地表達出來。