2012-08-27 15 views
0

我需要使用PCRE正則表達式提取一行中的電子郵件和郵政編碼。該行可以包含任意順序的其他字段。每個字段如果退出,只發生一次。只有都存在字段,正則表達式纔會打印結果。如何僅在Lookahead/Lookbehind中打印項目?

我寫此正則表達式,而是整個行被顯示

^(?=.*?[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b)(?=.*?\b[\d]{5}\b).*$ 

實例:

F1 F2 F3 11061 f4的[email protected]
打印==> 11061 [email protected]

F1 F2 F3 F4 10018個[email protected]
打印==> [email protected] 10018

f2 f4 10048 f3
打印==>(null)

有沒有辦法只打印匹配的圖案?

回答

0

什麼:

(\d{5})|([A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}) << only if the input contains BOTH 

編輯:

(?:(?<zip>\d{5}).*(?<email>[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}))|(?:(?<email>[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}).*(?<zip>\d{5})) 

組 「拉鍊」 的拉鍊

組 「電子郵件」 是電子郵件地址

+0

感謝TheHe。但是我需要正則表達式才能打印結果,只有在兩個項目在同一行中。也可以在電子郵件後跟隨郵政編碼,反之亦然。 – user1627819

+0

不正確?有「|」 - 字符(邏輯OR)... 您使用哪種語言使用該正則表達式以及哪些修飾符? 整串還是一行一行? – TheHe

+0

不正確。該正則表達式匹配「12345」。只有在郵件和郵政編碼都存在的情況下,我才需要打印。我使用Expresso和Google Regex測試人員進行驗證。謝謝 – user1627819