Сложность с простым регулярным выражением для файлов .obj - PullRequest
1 голос
/ 26 сентября 2010

Я пытаюсь разобрать строки вида:

command arg1[ arg2, ... argn]

, например:

usemtl weasels

или

f 1/2/3 4/5/6 7/8/9

Вот мое регулярное выражение:

^(\\w+)(( \\S+)+)$

Когда я анализирую строку "usemtl weasels", я получаю следующие группы захвата:

Match 0: 'usemtl weasels'
Match 1: 'usemtl'
Match 2: ' weasels'

Почему пробел перед второй группой совпадений?Это не отображается в Rubular.

1 Ответ

0 голосов
/ 26 сентября 2010

Группировка в Java регулярных выражений немного странно. Группа 0 дает вам полное соответствие вашего регулярного выражения - это то же самое во всех реализациях регулярных выражений, которые я знаю. Но группа n (для n > = 1) даст вам последнее совпадение объявленной группы n , а не n найдено совпадение.

Ваше второе совпадение дает вам «ласки» с пробелом в начале, потому что ваш шаблон содержит этот пробел. Вы объявили свою вторую группу (( \\S+)+), и эта группа дает вам второй матч.

Если вы примените свой шаблон к строке a b c d, ваша группа 0 будет a b c d, группа 1 будет a, группа 2 будет b c d, а группа 3 будет d, потому что это последний матч вашей 3-й объявленной (внутренней) группы ( \\S+).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...