Regex: Как вы фиксируете одну группу из нескольких групп с помощью регулярных выражений? (в рубине) - PullRequest
0 голосов
/ 04 октября 2010

У меня есть две группы текста:

firstgroup
(some content)
endgroup


secondgroup
(some content)
endgroup

Я пытаюсь просто захватить первую группу (не вторую группу).Я использую это регулярное выражение:

firstgroup(.|\n)*endgroup

По какой-то причине регулярные выражения выбирают как первую группу, так и вторую группу (возможно, потому что она смотрит на самую последнюю «конечную группу» выше).Есть ли способ изменить мое регулярное выражение так, чтобы я выбирал только первую группу (а не вторую)?

Ответы [ 2 ]

1 голос
/ 04 октября 2010
string=<<EOF
firstgroup
(some content)
endgroup


secondgroup
(some content)
endgroup
EOF

puts string.split(/endgroup/)[0] + "endgroup"
1 голос
/ 04 октября 2010

Вам нужен ленивый квантификатор

/firstgroup\n(.*?)\nendgroup/m

чтобы завершить группу как можно скорее. Смотри http://www.rubular.com/r/D6UkOnMYLj.

(И вы можете использовать флаг /m, чтобы . соответствовал новым строкам.)

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