Java - регулярное выражение - разделение группы - PullRequest
2 голосов
/ 19 марта 2012

Мне нужно сопоставить записи типа {@x anything} в строках типа a b c 1 225 {@x anything here1} test test {@x blabla} xyz test {@x any characters here}. Я пытался \{(@x ([^\}].*\w+(\.*)\s*)*)\} до сих пор, но это не совсем то, что я хочу, и я немного застрял: (

Так что должно получиться:

anything here1

blabla

any characters here

Ответы [ 5 ]

2 голосов
/ 19 марта 2012

Хорошо, чтобы извлечь все группы, которые идут с этой структурой, вы можете начать с:

{@x [a-zA-Z0-9 ]+}

С этого момента просто удалите заголовок и конец запрошенных строк, и вы получите требуемый вывод.

РЕДАКТИРОВАТЬ:

Я немного обновил регулярное выражение:

{@x [\w= ]+}
1 голос
/ 22 марта 2012

Мне кажется, что вы хотите сказать в шаблоне "соответствует минимум между символами '{' и '}'", поэтому вы можете использовать следующий шаблон:

    final String string = "a b c 1 225 {@x anything = here1} test test {@x bl** #abla} xyz test {@x any characters here}";
    final Pattern pattern = Pattern.compile( "\\{@x (.*?)\\}" ); // <-- pattern
    final Matcher matcher = pattern.matcher( string );
    while ( matcher.find() )
        System.out.println( matcher.group( 1 ) );

? in .*? делает именно это.

1 голос
/ 19 марта 2012

Это должно сделать это:

String string = "a b c 1 225 {@x anything here1} test test {@x blabla} xyz test {@x any characters here}";
String regexp = "\\{\\@x ([^\\}]*)\\}";
Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(string);
while (matcher.find()){
    System.out.println(matcher.group(1));
}

\ {\ @ x - совпадения, которые вы запускаете.

([^ \}] *) - соответствует любому, кроме end-curly (}) и помещает это в группу (1)

\} - соответствует концу вьющиеся

Затем вы ищете и вычитаете свою группу.

1 голос
/ 19 марта 2012

Еще одна попытка:

  String input="a b c 1 225 {@x anything here1} test test {@x blabla} xyz test {@x any characters here}";
  String pattern = "\\{@x [(\\w*)(\\s*)]*\\}";
  for( String s: input.split(pattern)){
      System.out.println(s);
  }

\ w * = любое слово (a-z, A-Z, 0-9); * = 0 или больше

\ s * = пробел; * = 0 или больше

[] * - повторяющаяся группа.

1 голос
/ 19 марта 2012

Попробуйте это: "({@x ([^ {] *)})"

   String string = "a b c 1 225 {@x anything = here1} test test {@x bl** #abla} xyz test {@x any characters here}";        
    String regexp = "(\\{\\@x ([^\\{]*)\\})";
    Pattern pattern = Pattern.compile(regexp);
    Matcher matcher = pattern.matcher(string);
    while (matcher.find()){
        System.out.println(matcher.group(2));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...