На информационном ресурсе применяются рекомендательные технологии (информационные технологии предоставления информации на основе сбора, систематизации и анализа сведений, относящихся к предпочтениям пользователей сети "Интернет", находящихся на территории Российской Федерации)

Руководство по началу работы. Фиксация regex группы. Группы кадра

Одна из наиболее полезных особенностей Groovy является способность использовать регулярные выражения для "фиксации" данных из регулярного выражения. Скажем, например, мы хотели извлечь данные местоположении Ливерпуля, Англия со следующими данными:

locationData = "Liverpool, England: 53° 25?
0? N 3° 0? 0?"

Мы могли бы использовать 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", условный оператор не выполнился бы.

 

Рекомендуем
Популярное
наверх