如何编写常规匹配表达式。 -Java

时间:2011-09-23 09:08:24

标签: java pattern-matching

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

(something), (something2), (something3)

如何为此编写匹配表达式以读取组中的内容,某事物2,某事物3。

3 个答案:

答案 0 :(得分:1)

您不能一次性阅读所有这些群组,而是使用Matcher#find()这个表达式,您可能会读到这些:\(([^\(\)]*)\)(读取:匹配必须以(开头,必须包含任何不属于()的字符数 - 这些字符组成了您的组 - 并且必须以)结尾。

请注意,括号中的转义不是必需的,但为了保持一致性,因为它们是在外面需要的。

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

while(m.find())
{
  System.out.println(m.group( 1 ));
}

打印:

something
something2
something3

答案 1 :(得分:1)

你可以用一行读出所有的东西:

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]

答案 2 :(得分:0)

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

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