如何编写正则匹配表达式-JAVA

如何编写正则匹配表达式-JAVA,java,pattern-matching,Java,Pattern Matching,我想编写匹配的表达式来读取大字符串中括号()之间的字符串。大字符串是:- (something), (something2), (something3) 我如何编写匹配表达式来读取组中的某些内容、某些内容2、某些内容3。您不能一次读取所有这些组,但可以使用Matcher\35; find()和以下表达式:\([^\(\)]*)(读取:匹配必须以开头)(,必须包含任何数量的非字符(或)-这些字符构成您的组-,并且必须以结尾)) 请注意,括号中的转义不是必需的,而是为了一致性而进行的,因为它们需要

我想编写匹配的表达式来读取大字符串中括号()之间的字符串。大字符串是:-

(something), (something2), (something3)

我如何编写匹配表达式来读取组中的某些内容、某些内容2、某些内容3。

您不能一次读取所有这些组,但可以使用
Matcher\35; find()
和以下表达式:
\([^\(\)]*)
(读取:匹配必须以
开头)(
,必须包含任何数量的非
字符(
-这些字符构成您的组-,并且必须以
结尾)

请注意,括号中的转义不是必需的,而是为了一致性而进行的,因为它们需要在外部

Pattern p = Pattern.compile("\\(([^\\(\\)]*)\\)");
Matcher m = p.matcher( "(something), (something2), (something3)" );

while(m.find())
{
  System.out.println(m.group( 1 ));
}
这张照片是:

something
something2
something3

以下程序将获得所需的输出

public class RegexTestStrings {

    public static final String EXAMPLE_TEST = "(something),(something2),(something3)";

    public static void main(String[] args) {
        String[] splitString = (EXAMPLE_TEST.split("\\("));
        System.out.println(splitString.length);
        for (String string : splitString) {
            System.out.println(string.replace(")",""));
        }
    }
}
首先,它将从
开始,然后替换
,这样您将得到以下输出:

something,

something2,

something3

您可以使用一行将所有Something读入一个数组:

String[] somethings = input.replaceAll("(^.?*\\(|\\)[^\\(]*$)", "").split("\\).*?\\(");
下面是一些测试代码:

public static void main(String... args) throws InterruptedException {
    String input = "foo (something1) (something2), blah (something3) bar";
    String[] somethings = input.replaceAll("(^[^\\(]*\\(|\\)[^\\(]*$)", "").split("\\).*?\\(");
    System.out.println(Arrays.toString(somethings));
}
输出:

[something1, something2, something3]

somethings
可以包含括号吗?不,它不包含大括号。@也许你应该看看我的答案-它只在一行代码中将somethings读入字符串[],返回
(something1)\n(something2)\n(something3)
(`\n`用于显示目的).@精英绅士-我不太明白你的评论。正则表达式不会返回括号,只返回中间的组。@Thomas,当我使用
group()
时,你指定了一个
group(1)
,它返回了你在我的帖子上看到的结果。它实际上解决了我的正则表达式问题。:-)@托马斯-是的,你可以在一行中阅读所有内容!看看我的答案。