Одна из наиболее полезных особенностей Groovy является способность использовать регулярные выражения для "фиксации" данных из регулярного выражения. Скажем, например, мы хотели извлечь данные местоположении Ливерпуля, Англия со следующими данными:
Мы могли бы использовать split() функции строки, а затем пройти и раздеть запятую между Ливерпулем и Англией, и всеми специальными символами местоположения. Или мы могли бы сделать все это за один шаг с регулярными выражениями. Синтаксис для того, чтобы делать это является немного странным. Во-первых, мы должны определить регулярное выражение, помещая что-нибудь, что нас интересует в круглых скобках.
myRegularExpression = /([a-zA-Z]+), ([a-zA-Z]+): ([0-9]+). ([0-9]+).
([0-9]+). ([A-Z]) ([0-9]+). ([0-9]+). ([0-9]+)./
Далее, мы должны определить "matcher", который осуществляется с использованием = ~ оператора:
matcher = ( locationData =~ myRegularExpression )
Gеременная Matcher содержит java.util.regex. Matcher также является улучшением groovy. Вы можете получить доступ к Вашим данным Matcher объекта точно так же, как Вы были бы в Java. Более лучший способ получить ваши данные состоит в том, чтобы использовать matcher, как будто это был массив - два размерных массива, если быть точным. Двумерной массив просто массив массивов. В этом случае первая "размерность" массива соответствует каждому соответствию регулярного выражения к строке.
На этом примере, регулярное выражение соответствует только один раз, поэтому есть только один элемент в первой размерности двумерного массива. Таким образом рассмотрите следующий код:matcher[0]
То выражение должно оценить:
["Liverpool, England: 53° 25? 0? N 3° 0? 0?", "Liverpool", "England",
"53", "25", "0", "N", "3", "0", "0"]
И тогда мы используем второе измерение массива для доступа к группам кадра, которыми мы заинтересованы:
if (matcher.matches()) {
println(matcher.getCount()+ " occurrence of the regular expression was found in the string.");
println(matcher[0][1] + " is in the " + matcher[0][6] + " hemisphere. (According to: " + matcher[0][0] + ")")
}
Отметим, что дополнительные выгоды, которые мы получаем с помощью регулярных выражений заключается в том, что мы можем видеть, правильно ли построены данные. То есть, если бы locationData содержала строку "Could not find location data for Lima, Peru", условный оператор не выполнился бы.