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

Java 正则表达式以获取括号或逗号之前的字符,java,regex,Java,Regex,我用这个把头发拔了一点 假设我有一个字符串7f8hd::;;8843fdj fls”“:]fjisla;vofje]}fd)fds,f,f 我现在想提取这个7f8hd::;;8843fdj fls”“:来自字符串,前提是字符串以}或]或,或结尾。但所有这些字符都可能存在,我只需要第一个字符 我尝试过用Matcher和Pattern类创建正则表达式,但没有成功,但我似乎做得不对 我能想出的最好的办法是在下面,但我的reg exp似乎不像我想的那样有效 String line = "7f8hd::;

我用这个把头发拔了一点

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

我现在想提取这个
7f8hd::;;8843fdj fls”“:
来自字符串,前提是字符串以
}
]
结尾。
但所有这些字符都可能存在,我只需要第一个字符

我尝试过用Matcher和Pattern类创建正则表达式,但没有成功,但我似乎做得不对

我能想出的最好的办法是在下面,但我的reg exp似乎不像我想的那样有效

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。任何帮助都会很好

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

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

您可以通过
replaceAll
来切割其余部分:

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

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

你能试试正则表达式吗?(.*?[}\]),](.*?我在rubular上测试了它,并针对你的示例进行了测试。

你可以使用它(作为java字符串):


这是一个

你忘了逗号。:)请加上它。正是我想要的。简明扼要。您没有像问题中所述添加逗号大小写,但这很容易解决。^[^]}),]*对我来说很有效。需要删除括号之前的所有内容,所以我使用了^[^(]*
"(.+?)[\\]},)].*"