Как написать регулярное совпадение выражений.-Джава - PullRequest
1 голос
/ 23 сентября 2011

Я хочу написать соответствующее выражение для чтения строки между скобками () из большой строки. Например: большая строка: -

(something), (something2), (something3)

Как мне написать соответствующее выражение для этого, чтобы прочитать что-то, что-то2, что-то3 в группах.

Ответы [ 3 ]

1 голос
/ 23 сентября 2011

Вы можете прочитать все что-нибудь в массив одной строкой:

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]
1 голос
/ 23 сентября 2011

Вы не можете прочитать все эти группы за один раз, но, используя 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
0 голосов
/ 23 сентября 2011

Следующая программа получит требуемый вывод

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
...