2012-11-19 296 views
-3

任何人都可以幫助我修復找到兩個@符號之間的子字符串的正則表達式。模式匹配的正則表達式

例 - [email protected]@[email protected]@ghfufjkfk.

現在我想取回這兩個HELLO子字符串。 在此先感謝。 這有助於我在檢索數據時進行模式匹配。

+5

'修正正則表達式' - 您希望我們修復哪一個? –

+0

請注意,如果您在'@'之間獲取內容,您還將獲得'ggjgkglgll'。你必須過濾掉。 –

+0

對於簡單的分隔字符串,您可以使用split(「@」)並使用1和3索引。 –

回答

2

這將@字符之間不匹配的文本:

(?<[email protected]).*?([email protected]) 

這些都是查找變通任一端(非消耗比賽),我已經使用之間的非貪婪的比賽,所以比賽沒有按」牛逼一路跑到下一個@包圍比賽結束


如果你想要一個優雅的一行提取所有這些phraxes,這樣做:

String[] phrases = input.replaceAll("(^.*[email protected])|(@[^@]*$)", "").split("@.*[email protected]"); 

下面是一些測試代碼:

public static void main(String[] args) { 
    String input = "[email protected]@[email protected]@ghfufjkfk"; 
    String[] phrases = input.replaceAll("(^.*[email protected])|(@[^@]*$)", "").split("@.*[email protected]"); 
    System.out.println(Arrays.toString(phrases)); 
} 

輸出:

[hello, hello] 
+0

爲什麼你使用「後視」和「前瞻」?他們並不是真的需要在這裏。 –

+0

@RohitJain我認爲他們是需要的 - 他不想在*之間的文本*之間匹配,而不是*包含*'@' – Bohemian

+3

@Bohemian ..這也可以工作: - '@(。*?)@',並剛剛得到組1。 –

0
String text = "[email protected]@[email protected]@ghfufjkfk"; 

    Pattern ptrn = Pattern.compile("@(\\w+)@"); 

    Matcher mtchr = ptrn.matcher(text); 

    while(mtchr.find()) 
    { 
     String match = mtchr.group(1); 

     System.out.println("Match = <" + match + ">"); 
    } 
+0

謝謝泡沫..這符合我的要求 – HeyItsMe

+1

不客氣。請投票並接受答案,如果你不介意 – amphibient

+0

嘿對不起...我正在嘗試投票,但我沒有足夠的投票聲望....當我得到所需的聲望時,我肯定會投票。非常感謝 :) – HeyItsMe

0

字符串簡單的regex之間@

'@(.*?)@' 

說明:

@  # Match starts at literal @ 
(.*?) # Capture everything inbetween (non-greedy) 
@  # Match ends at literal @ 

看到它在行動here