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

       

Оператор split


Оператор разбиения split выполняет в каком-то смысле противоположную роль оператору поиска m/// с модификатором g в списковом контексте. Если этот оператор m/// возвращает все фрагменты текста, которые совпали с регулярным выражением, то оператор split возвращает фрагменты текста, которые не совпали с регулярным выражением, заданным ему в качестве аргумента. Оператор split разбивает исходный текст на куски, которые разделяются текстом, совпадающим с заданным регулярным выражением и возвращает эти куски текста в виде массива. В качестве разделителя может выступать регуляр ное выражение, которое совпадает только с позицией в тексте, например, оператор

@lines=split /^/m, $text;

вернет в массиве @lines заданный текст, разбитый на логические строки.

Замечу, что в регулярном выражении в операторе split якорь начала текста ^ означает начало логической строки, даже если модификатор m не задан, поэтому оператор

@lines=split /^/, $text;

будет работать точно так же, как и предыдущий оператор с модификатором m. Но можно это неявное правило отменить:

@lines=split /(?-m)^/, $text;

Это будет эквивалентно оператору

@lines=split /\A/, $text;

На метасимвол $ это неявное правило не распространяется.

В регулярном выражении, которое применяется в операторе split, точно так же работает интерполяция переменных и модификатор o, как и в обычных регулярных выражениях.

Оператор split можно использовать в простых случаях, например, когда надо разбить выходные данные от HTML-формы по знаку равенства, но этот оператор можно применять и в более сложных случаях. Однако, оператор split перегружен разными тонкостями и исключениями, которые надо рассмотреть. В общем случае этот оператор имеет вид

split [ совпадение [ , целевой текст [ , ограничение ] ]]

Список операндов при необходимости можно заключать в скобки. Третий операнд не обязателен. Если его значение равно нулю, то это эквивалентно тому, что он не задан.

Второй операнд также не обязателен, но в случае его отсутствия также должен отсутствовать и третий операнд. Не обязателен и первый операнд, оператор

split

эквивалентен вызову

split ' ', $_, 0

где первый операнд является строкой, состоящий из одного пробела. Этот вызов разобьет текст, находящийся в $_, по пробельным символам, при этом начальные и заключительные пустые элементы созданы не будут.



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