2

我用这个把头发拉了一点。

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

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

我曾尝试使用 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。任何帮助都会很棒。

4

4 回答 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 ,
于 2013-05-09T14:24:23.197 回答
3

你可以通过以下方式削减其余部分replaceAll

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

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

String newStr = yourStr.split("[\\])},]")[0];
于 2013-05-09T14:29:13.547 回答
2

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

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

这是一个小提琴

于 2013-05-09T14:35:09.843 回答
1

您能否尝试一下(.*?)[}\]),](.*?)我在 rubular 上测试过的正则表达式并针对您的示例进行操作。

于 2013-05-09T14:29:34.093 回答