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

Руководство по началу работы. Основы регулярных выражений. Регулярные выражения

Регулярные выражения - швейцарский армейский нож для обработки текста. Они дают программисту возможности извлечь сравнивать и извлечь шаблоны из строк. Простейший пример регулярного выражения является сочетание букв и цифр. И простейшие выражения с участием регулярных выражений использует == ~ оператор.

Так, например, сравнивать соответствие Dan Quayle's правописания слову "картофель":

"potatoe" ==~ /potatoe/

Если Вы поместите это в groovyConsole и запустите его, он вернет true. Есть несколько вещей, на которые нужно обратить внимание. Во-первых, это ==

~ оператор, который аналогичен == оператору, но соответствует шаблонам вместо точного вычисления равенства. Второй заключается в регулярных выражениях, вложенных в /. Это говорит groovy (а также любому другого что читает кода), что это регулярное выражение, а не только строка.

Но давайте скажем о том, что мы также хотели бы соответствовать правильной проверке правописания, мы могли бы добавить '?' после 'е', чтобы сказать, что e является необязательным. Следующие будет оценино по-прежнему true.

"potatoe" ==~ /potatoe?/

И правильная проверка правописания будет также соответствовать:

"potato" ==~ /potatoe?/

Но не совпадают:

"motato" ==~ /potatoe?/

Вот как вы определяете простое логическое выражение с участием регулярных выражений. Но давайте немного осложним. Давайте определять метод, который проверяет регулярное выражение. Таким образом, для примера, давайте писать код на соотвествие фамилии Pete Wisniewski:

def checkSpelling(spellingAttempt, spellingRegularExpression)
{
        if (spellingAttempt ==~ spellingRegularExpression)
        {
               println("Congratulations, you spelled it correctly.")
         } else {
               println("Sorry, try again.")
        }
}
theRegularExpression = /Wisniewski/
checkSpelling("Wisniewski", theRegularExpression)
checkSpelling("Wisnewski", theRegularExpression)

Есть несколько новых вещей мы сделали здесь. Первый заключается в том, что мы определили функцию (на самом деле метод, но я буду использовать два слова взаимозаменяемо). Функция - коллекция кода, подобного замкнутому выражению. У функции всегда имеются имена, как замкнутые выражения могут быть "анонимными".

После того как мы определим эту функцию, мы можем использовать его снова и снова позже.

В этой функции условный оператор if в полужирных тестах, чтобы видеть, соответствует ли параметр spellingAttempt регулярному выражению, используя == ~ оператор.

Теперь давайте немного сложнее. Скажем, мы также хотим соответствовать строке, если у названия нет 'w' в середине, мы могли бы:

theRegularExpression = /Wisniew?ski/
checkSpelling("Wisniewski", theRegularExpression)
checkSpelling("Wisnieski", theRegularExpression)
checkSpelling("Wisniewewski", theRegularExpression)

Симовол ?, который был добавлен в spellingRegularExpression говорит, что элемент непосредственно перед ним (символ 'w') не является обязательным. Попробуйте выполнить этот код с различными проверками правописания в переменной spellingAttempt чтобы доказать самому себе, что только двумя принятыми проверками правописания является теперь "Wisniewski" и "Wisnieski". (Заметим, что вам придется оставить определение checkSpelling наверху Вашего groovyConsole)

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

Теперь давайте также принять проверку правописания, если "ie" перемещен в середине. Рассмотрим следующее:

theRegularExpression = /Wisn(ie|ei)w?ski/ checkSpelling("Wisniewski", theRegularExpression) checkSpelling("Wisnieski", theRegularExpression) checkSpelling("Wisniewewski", theRegularExpression)

Еще раз о проверке правописания. Должно быть только четыре проверки правописания, которые работают, "Wisniewski", "Wisneiwski", "Wisnieski" и "Wisneiski". Символ '|' говорит, что какая-либо выражение налево или выражение направо является приемлемым, в данном случае "ie" или "ei". Круглые скобки должны просто там отметить начало и конец интересующего раздела.

Одна из последних интересных особенностей является возможность указать группу символов, все из которых допустимы. Это делается с помощью квадратных скобкок *[]*. Попробуйте следующие регулярные выражения с различными опечатками в фамилии Pete:

theRegularExpression = /Wis[abcd]niewski/ // requires one of 'a', 'b', 'c' or 'd' theRegularExpression = /Wis[abcd]?niewski/ // will allow one of 'a', 'b', 'c' or 'd', but not required (like above) theRegularExpression = /Wis[a-zA-Z]niewski/ // requires one of any upper\- or lower-case letter theRegularExpression = /Wis[^abcd]niewski/ // requires one of any character that is '''not''' 'a', 'b', 'c' or 'd'

Последний требует некоторых пояснений. Если первый символ в квадратных скобках *^* то это значит ничего, кроме символов, указанные в скобках.

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