Добавить в цитаты Настройки чтения

Страница 49 из 51



Небольшое пояснение по поводу «жадности». «Жадные» варианты повторителей пытаются захватить как можно большую часть входного текста, в то время как «не жадные» — как можно меньшую. Например, b+ как и b* примененные к входной строке «abbbbc» найдут «bbbb», в то время как b+? найдет только «b», а b*? — вообще — пустую строку; b{2,3}? найдет «bb», в то время как b{2,3} найдет «bbb».

По умолчанию, в FB Editor повторители могущие быть жадными, являются таковыми.

Примеры:

foob.*r — находит «foobar», «foobalkjdflkj9r» и «foobr»

foob.+r — находит «foobar», «foobalkjdflkj9r» но не «foobr»

foob.?r — находит «foobar», «foobbr» и «foobr» но не «foobalkj9r»

fooba{2}r — находит «foobaar»

fooba{2,}r — находит «foobaar», «foobaaar», «foobaaaar» и т.д.

fooba{2,3}r — находит «foobaar», или «foobaaar» но не «foobaaaar»

((+d )?(d{3}) )?(d{3}(-dd){2}) — Находит номера телефонов в форматах «+7 (095) 555-55-55», «(095) 555-55-55», «555-55-55». Это сложный пример, и в нем используется группировка скобками. Подробнее о применении скобок см. ниже.

(?g)(

[^-].{5,59}

Метасимволы — варианты

Вы можете определить перечень вариантов , используя метасимвол «|» для их разделения, например, fee|fie|foe найдет «fee» или «fie» или «foe», (так же как f(e|i|o)e). В качестве первого варианта воспринимается все от предыдущего метасимвола ( или [ или от начала выражения до первого метасимвола «|», в качестве последнего — все от последнего «|» до конца выражения или до ближайшего метасимвола). Обычно, чтобы не запутаться, набор вариантов всегда заключают в скобки, даже если без этого можно было бы обойтись.

Варианты пробуются начиная с первого и попытки завершаются сразу же как удастся подобрать такой, при котором совпадет вся последующая часть выражения. Это означает, что варианты не обязательно обеспечат «жадное» поведение. Например, если применить выражение foo|foot ко входной строке «barefoot», то будет найдено «foo» так это первый вариант который позволил совпасть всему выражению.

Обратите внимание, что метасимвол | воспринимается как обычный символ внутри перечней символов, например, [fee|fie|foe] означает ровно то же самое что и [feio|].

.* — найдет все корректно закрытые параграфы. Так же найдутся и включения вида

TEXT, так что это выражение можно применять только на однородном тексте. Как альтернативный вариант можно предположить (.*|

.*

Заметьте, что применив то же выражение в жадном режиме (?g).* мы не найдем ничего полезного.

Оговорка. Выражения с метасимволом «|» в FB Editor в режиме исходника  НЕ ФУНКЦИОНИРУЮТ.

Метасимволы — подвыражения

У скобок в регулярных выражениях двоякая функция

1. Скобки позволяют группировать элементы (аналогично математическому использованию)

2. Скобки выделяют в исходном тексте подвыражения , на которые можно ссылаться при замене.

Вы можете обратиться к любому подвыражению в строке замены используя его номер. Подвыражения нумеруются слева направо, в порядке появления открывающих скобок. Ссылка осуществляется в виде $N, где N-номер.

Примеры группировки:

(проба){8,10} — находит строку содержащую 8, 9 или 10 копий «проба»

про([0-9]|б+)а — находит «про0а», «про1а» , «проба», «пробба», и т.д.



Примеры замены:

(.*)

((+d )?(d{3}) )?(d{3}(-dd){2}) —>>— $3 — Найдет в любом телефонном номере вида «+7 (095) 555-55-55» последнюю часть «555-55-55»

(?g)([s(]|A|
)(http://|ftp://|https://)([^s)"']+) —>>— $1$2$3 — Такая замена преобразует все URL, встреченные в тексте, в гиперссылки.

(?g)([s(]|A|
)(www.)([^s)"']+)—>>—$1$2$3 — Преобразует все строки типа www.domain.root в гиперссылки

Метасимволы — обратные ссылки

Метасимволы от 1 до 9 воспринимаются как обратные ссылки. N совпадает с ранее найденным подвыражением #N. В отличие от случая с заменой, где используются переменные $N, обратные ссылки можно применять в выражении поиска.

Примеры группировки:

(.)1+ — находит «aaaa» и «cc»

(.+)1+ — также находит «abab» и «123123»

(['"]?)(d+)1 — находит «"13"» (в дв.кавычках), или «'4'» (в один.кавычках) или 77 (без кавычек)

Модификаторы

Модификаторы служат для изменения режимов работы регулярных выражений. Они вводятся в виде (?imsgr-imsgr). Если модификатор вписан после минуса — он отключается, если нет — включается. Модификаторы подвержены группировке (в Perl нет), можно применить модификатор для отдельного участка выражения (см. пример).

Модификаторы:

i — Регистро-независимый режим. Использует выбранный в ОС язык по умолчанию. По умолчанию выключено.

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

s — Воспринимать входной текст как одну строку. При этом метасимвол «.» совпадает с любым символом, если же этот модификатор выключен, то он не совпадает с разделителями строк (см.также Стандартные перечни символов). По умолчанию включено.

g — Включая его Вы переключаете все повторители в «жадный» режим. По умолчанию включено.

r — Модификатор предназначенный для русского языка. Если включен, то диапазоны вида а-я включают также букву «ё», А-Я включают «Ё», а а-Я включает вообще все русские буквы. По умолчанию включено.

Примеры группировки:

(?i)Saint-Petersburg — находит «Saint-petersburg» и «Saint-Petersburg»

(?i) — Saint-(?-i)Petersburg — находит «Saint-Petersburg» но не «Saint-petersburg»

(?i)(Saint-)?Petersburg — находит «Saint-petersburg» и «saint-petersburg»

((?i)Saint-)?Petersburg — находит «saint-Petersburg», но не «saint-petersburg»

Оговорка. В FB Editor модификаторы НЕ ФУНКЦИОНИРУЮТ.