Элементарные регулярные выражения

Элементарная структурная единица регулярного выражения — это символ. Текст можно искать по определенному набору букв и цифр. Рассмотрим пример, в котором с помощью регулярного выражения выделим из данных строк те, которые содержат сочетание букв bc (именно в этом порядке):

Исходный набор строк:

abc

abcd

dcba

adbc

Регулярное выражение:

bc

Результат:

abc

abcd

adbc

 

1.5.2. Конструкция вида [...]

Рассмотрим другой пример, заменив некоторые буквы в строках на заглавные:

Исходный набор строк:

аbС

abcd

dcba

adBc

Регулярное выражение:

bc

Результат:abcd

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

В результате получается всего одна строка — вторая. Для вывода трех строк, как в первом примере, понадобится особая конструкция. Рассмотрим ее.

В основе данной конструкции лежат две квадратные скобки (открывающая и закрывающая), внутри которых расположены символы либо конструкции (последний случай будет описан далее), один из которых может быть на месте этой конструкции в итоговом выражении. Изменим регулярное выражение в предыдущем примере. Теперь задачей является сделать это регулярное выражение более универсальным, чтобы с его помощью можно было найти в исходном наборе строк сочетание bc независимо от того, в каком регистре находятся буквы в конечных выражениях.

Исходный набор строк:

аbС

abcd

dcba

adBc

Регулярное выражение:

[Вb][Сc]

Результат:

аbС

abcd

adBc

Теперь рассмотрим такой пример: с помощью регулярного выражения необходимо выделить из указанных в предыдущем примере строк те, которые содержат некоторую букву английского алфавита в нижнем регистре и сразу за ней — букву с в нижнем или верхнем регистре. При применении способа перечисления для решения поставленной задачи получится следующее регулярное выражение:

[abcdefghijklmnopqrstuvwxyz] [Cc]

Это верно, но строка получилась длинной, что особенно неудобно при составлении больших регулярных выражений. В подобных случаях можно перечислить все эти 26 символов короче, используя интервалы, то есть указать начальный и конечный символы, поставив между ними знак «тире». Рассмотрим пример:

Исходный набор строк:

аbС

abcd

dcba

adBc

Регулярное выражение:

[a-z][Cc]

Результат:

аbС

abcd

dcba

Здесь a-z — это и есть нужный интервал. Можно изменить пример так, чтобы первый символ мог быть как строчным, так и прописным, для чего сразу после первого интервала указываем второй:

Исходный набор строк:

аbС

abcd

dcba

adBc

Регулярное выражение:

[a-zA-Z][Cc]

Результат:

аbС

abcd

dcba

adBc

То же касается и цифр. Границами интервала могут быть любые символы, но последовательности типа [z-a] и [5-1] смысла иметь не будут, так как ASCII-код первого символа должен быть меньше либо равен коду завершающего. По поводу интервалов с цифрами следует напомнить, что символ нуля идет раньше символов всех остальных цифр. Количество стоящих рядом последовательностей неограниченно.

В этой же конструкции можно обратить (или, как еще говорят, инвертировать) выбор символов, поставив после знака открывающей квадратной скобки символ ^, после чего на месте конструкции будут предполагаться все символы, кроме указанных в ней самой. Рассмотрим это на предыдущем примере.

Из данного набора строк выделим только те, в которых буква b стоит перед любым символом, кроме буквы с.

Исходный набор строк:

аbС

abcd

dcba

adBc

Регулярное выражение:

[Bb][^Cс]

Результат:

dcba