Почему вы не можете вызывать встроенные методы регулярных выражений в Groovy? - PullRequest
0 голосов
/ 04 февраля 2019

В настоящее время я изучаю отличный, больше для удовольствия, чем для необходимости, но я столкнулся с чем-то, чего я не совсем понимаю.

Если я запустил следующее:

["SEMOLINA_0001"].collect {
    def m = it =~ /SEMOLINA_([A-Fa-f0-9]+)/
    println m
    assert m
    println m
    return m.group(1)
}

Я получаю результат:

java.util.regex.Matcher[pattern=SEMOLINA_([A-Fa-f0-9]+) region=0,13 lastmatch=]
java.util.regex.Matcher[pattern=SEMOLINA_([A-Fa-f0-9]+) region=0,13 lastmatch=SEMOLINA_0001]
Result: [0001]

Если я удаляю assert, я получаю исключение "Не найдено совпадений" при вызове .group(1).

Я могу обойти этоочевидно, но мне не нравится поведение языка, которого я не понимаю - я бы не подумал, что у assert будут побочные эффекты, так что это ошибка или это намеренное поведение, которое я просто не уловил?

(Для чего бы это ни стоило, я использую Groovy 2.5.5 в приведенном выше примере.)

Я также только что заметил этот вопрос , который былзакрыто как обман, хотя я думаю, что ошибочно, так как проблема, которую пользователь казался больше похожей на эту, а не на какую-то связь с именованными группами как таковыми.

1 Ответ

0 голосов
/ 05 февраля 2019

Проблема в том, что Matcher не был "запущен", выполнен перед доступом к группе.Вы можете получить доступ только к совпадениям с помощью собственного кода Groovy, но чтобы получить доступ к groups , вы должны использовать какой-то Matcher «работающий» метод, например matches() или find().

Обратите внимание, что assert в вашем случае выполняет логическое преобразование для Matcher, которое в конечном итоге вызывает matches() (как , отмеченное blackdrag ).

Имеет смысл, что Matcher не запускается автоматически, потому что он не знает, какой именно метод - matches() или find() - пользователь намеревается использовать (как отметил Andreas). * * тысяча двадцать-одна

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