Регулярные выражения Perl и их применение

       

Функция study


Функция

study( переменная с целевым текстом )

является еще одной возможностью оптимизации использования регулярных выражений.

Эта функция создает в переменной с целевым текстом скрытую информацию о тексте, который содержит эта переменная. Это список позиций, в которых каждый символ встречается в данном тексте. В результате на построение этого списка позиций расходуется время и память, которая обычно превосходит в четыре раза объем памяти для текста этой переменной. Поэтому выигрыша во времени можно не получить вовсе, если применять функцию study не там, где нужно. Функция study может существенно ускорить поиск, если в регулярном выражении имеется литеральный текст, но модификатор i сводит на нет усилия функции study. Также функция study может оказаться полезной, если к одной и той же переменной применяется много операторов с регулярными выражениями или если целевой текст имеет большой объем. При любом

присваивании значения переменной, содержащей целевой текст, внутренняя информация, привязанная к этой переменной, становится недействительной.

Для применения оптимизаций, которые возможны с функцией study, надо стараться выделять литеральный текст. Например, вместо

a+

надо написать эквивалентный подшаблон

aa*

а вместо

a{3,6}

нужно записать

aaa{0,3}

Если конструкция выбора (альтернативный шаблон) в каждой ветви начинается с одного и того же литерала, то его надо "вынести за скобку" и, к примеру, вместо

that|this

записать

th(?:at|is)


Функция

study( переменная с целевым текстом )

является еще одной возможностью оптимизации использования регулярных выражений.

Эта функция создает в переменной с целевым текстом скрытую информацию о тексте, который содержит эта переменная. Это список позиций, в которых каждый символ встречается в данном тексте. В результате на построение этого списка позиций расходуется время и память, которая обычно превосходит в четыре раза объем памяти для текста этой переменной. Поэтому выигрыша во времени можно не получить вовсе, если применять функцию study не там, где нужно. Функция study может существенно ускорить поиск, если в регулярном выражении имеется литеральный текст, но модификатор i сводит на нет усилия функции study. Также функция study может оказаться полезной, если к одной и той же переменной применяется много операторов с регулярными выражениями или если целевой текст имеет большой объем. При любом

присваивании значения переменной, содержащей целевой текст, внутренняя информация, привязанная к этой переменной, становится недействительной.

Для применения оптимизаций, которые возможны с функцией study, надо стараться выделять литеральный текст. Например, вместо

a+

надо написать эквивалентный подшаблон

aa*

а вместо

a{3,6}

нужно записать

aaa{0,3}

Если конструкция выбора (альтернативный шаблон) в каждой ветви начинается с одного и того же литерала, то его надо "вынести за скобку" и, к примеру, вместо

that|this

записать

th(?:at|is)



Содержание раздела