2013-05-09 178 views
2

我正在用这个拉我的头发。在括号或逗号前面加上字符的正则表达式

说我有一个字符串7f8hd::;;8843fdj fls "": ] fjisla;vofje]]} fd)fds,f,f

我想根据该字符串无论是}],)但所有这些字符可能是目前我结束的前提下,现在提取这种7f8hd::;;8843fdj fls "":从字符串只需要第一个。

我试过没有成功创建一个匹配器和模式类的正则表达式,但我似乎无法做到正确。

我能想到的最好的是在下面,但我的法律程序只是似乎没有像我认为应该的工作。

String line = "7f8hd::;;8843fdj fls "": ] fjisla;vofje]]} fd)fds,f,f"; 
Matcher m = Pattern.compile("(.*?)\\}|(.*?)\\]|(.*?)\\)|(.*?),").matcher(line); 
while (matcher.find()) { 
    System.out.println(matcher.group()); 
} 

我很明显没有正确理解reg exp。任何帮助都会很棒。从字符串的开头

回答

5
^[^\]}),]* 

比赛直到(但不包括)第一]}),

在Java:

Pattern regex = Pattern.compile("^[^\\]}),]*"); 
Matcher regexMatcher = regex.matcher(line); 
if (regexMatcher.find()) { 
    System.out.println(regexMatcher.group()); 
} 

(实际上,你可以删除反斜杠([^]}),]),但我想,让他们有清楚和兼容性,因为并非所有的正则表达式引擎识别的成语。)

说明:

^   # Match the start of the string 
[^\]}),]* # Match zero or more characters except ], },) or , 
+0

你忘了逗号。 :)添加它请。 – Kent 2013-05-09 14:32:47

+0

正是我想要的。简单而重要。您没有添加问题中所述的逗号事件,但这样做确实很麻烦。 – Gareth 2013-05-09 14:33:56

3

你可以只通过replaceAll削减剩余部分:

String newStr = yourStr.replaceAll("[\\])},].*", ""); 

split()并获得第一个元素。

String newStr = yourStr.split("[\\])},]")[0]; 
+0

This works ....谢谢 – 2017-10-12 17:57:50

1

你能尝试正则表达式(.*?)[}\]),](.*?)我测试rubular和对你的代码工作。

1

你可以使用这个(如Java字符串):

"(.+?)[\\]},)].*" 

这里是一个fiddle

+0

该网站的+1。从来不知道它存在。真棒。 – Gareth 2013-05-09 14:48:31

+0

thx。是的,它有时非常方便。 – luksch 2013-05-09 14:49:52

相关问题