Регулярные выражения в русских текстах

Автор: content Понедельник, Апрель 9th, 2012 Нет комментариев

Рубрика: Язык PHP

Альтернативы

Альтернативные последовательности разделяются символом «|».

Примеры

дом|изба => «дом» или «изба»
дом|улица|двор => «дом» или «улица» или «двор»

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

Модификаторы (квантификаторы) пишутся после символа, к которому они относятся. Если модификатор следует после круглых скобок (группировки), то он применяется к выражению в скобках.

+ => символ или выражение повторяется 1 или большее число раз
* => повторяется 0 или большее число раз
? => 1 или 0 раз
{n} => точно n раз
{n,} => по меньшей мере n раз
{n,m} => по меньшей мере n, но и не больше m раз

Примеры

дома? => «дом» или «дома»
дома+ => «дома», «домаа» и т.д.
дома* => «дом», «дома», «домаа» и т.д.

Произвольные символы

Точка «.» обозначает один произвольный символ. Множество возможных символов (класс) заключается в квадратные скобки «[]» — это значит, что в данном месте может стоять один из указанных в скобках символ. Если первый символ в скобках это «^» — значит не один из указанных символов не может стоять в данном месте выражения. Внутри класса можно употреблять символ «-» обозначающий диапазон символов. Например «[a-z]» обозначает один из строчных букв латинского алфавита.

Примеры

[abc] => «a», «b» или «c»
[^abc] => любая строчная буква кроме «a», «b» или «c».
С применением модификаторов:
[a-z]? => любая строчная буква, или отсутствие символа
.* => любое число любых символов

Группировка: круглые скобки

Круглые скобки применяются для определения группы символов или части выражения, к которой относится символ альтернативы («|») или модификатор.

Примеры

дом(ами|ом) => «домами» или «домом»
домами|ом => «домами» или «ом».
домами? => «домами» или «домам».
дом(ами)? => «дом» или «домами».

Внутренние преобразования

В регулярных выражениях допускаются русские буквы по выбранной кодировке (КОИ8 или Windows 1251). Перед самим поиском поисковое выражение трансформируется поисковой системой в латинские буквы по нашей системе транслитерации). Кроме того, точка . заменяется выражением «[a-zA-Z]«. В редких случаях это преобразование может привести к тому, что некоторые символы внутри классов ([]) или перед модификаторами получают другое значение. Для наибольшего контроля над этими трансформациями преобразованное поисковое выражение дается в начале страницы результатов поиска.

Возможности поиска

В качестве поисковых выражений допускаются словоформы и регулярные выражения. Необходимо искать целые словоформы. Поисковое выражение должно содержать в себе полную словоформу. Для обозначения произвольной части слова возможно использование символов «.*» (точка и звездочка).
Согласно с выбранной опцией, заглавные и строчные буквы различаются или не различаются. Словоформы разделяются пробелом. Это относится также к знакам препинания, так как они рассматриваются как отдельные слова.
Точку в аббревиатурах (и т. д., М. С.) или в конце предложения при поиске надо задать знаком «# «, а вопросительный знак («?») как «\?», потому что точка и вопросительный знак в регулярных выражениях являются метасимволами.
Если выбрана кодировка «КОИ8″ или «Windows 1251″, то ввод осуществляется либо русскими буквами по выбраной кодировке, либо латинскими буквами по нашей системе транслитерации. Допускается даже смесь русских и латинских букв.
Помимо целых словоформ можно использовать регулярные выражения языка PERL.
(См. краткое введение в регулярные выражения)
( Детальное описание регулярных выражений в языке PERL)

Примеры

нет дома будет найдено: нет дома
со знаками усечения слов:
дом.* будет найдено: (все словоформы, начинающие на «дом»)
поиск знаков препинания (точка, вопросительный знак)
нет \? будет найдено: нет ?
нет # будет найдено: нет .
и t# д# будет найдено: и t. д.
с помощью регулярных выражений:
дом(а|у|е|о[вм]|ах|ами?)? будет найдено: дом, дома, дому, доме, домом, домов, домам, домами, домах.
(перед|за) домом будет найдено: перед домом, за домом
ее( нет)? дома будет найдено: ее дома, ее нет дома

Автор: Michael Betsch

Источник: http://www.php.su/articles/?cat=regexp&page=009

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты