获取括号或逗号前的字符的正则表达式

3

我对此有些苦恼。

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

现在我想要从这个字符串中提取出7f8hd::;;8843fdj fls "":,基于的前提是该字符串以}],)结尾,但所有这些字符都可能存在,我只需要第一个。

我尝试使用Matcher和Pattern类创建正则表达式,但没有成功,我似乎无法弄对它。

我最好的尝试如下,但我的正则表达式似乎无法按照我想要的方式工作。

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());
}

我显然没有正确理解正则表达式。希望能得到帮助。

4个回答

7
^[^\]}),]*

从字符串开头匹配到(但不包括)第一个]}),

在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 ,

你忘了逗号,请加上。 :) - Kent
正是我想要的。简单明了。虽然你没有按照问题中所述添加逗号,但这很容易解决。 - Gareth
^[^]}),]* 对我有用。需要删除括号前面的所有内容,所以我使用了 ^[^(]*。 - Ojchris

3

您可以使用 replaceAll 方法来裁剪其余部分:

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

或者通过 split() 并获取第一个元素。
String newStr = yourStr.split("[\\])},]")[0];

2
您可以将其用作Java字符串:
"(.+?)[\\]},)].*"

here is a fiddle


1

你能试试这个正则表达式(.*?)[}\]),](.*?),我在rubular上测试过了,对你的例子有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接