2012-11-19 61 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