Функций — это pregsplit ()

Следует отметить, что невозможность применения ссылок внутри регулярного выражения является ограничением РИР, а не стандарта POSIX — это, к сожалению, означает, что реализация регулярных выражения РНР не полностью совместима с POSIX.
Основная функция PCRE в РНР — это pregjnatch ():
pregjnatch (pattern, string!, matches[, flags]]);
Как и ereg (), эта функция заставляет проверять иа соответствие регулярному выражению, сохраненному в pattern, строку string, при этом учитывая все совпадения ссылок, переданных в matches. Необязательный параметр flags на данный момент может содержать только значение PREG_OFFSET_CAPTURE. Если этот параметр указан, это заставляет preg_match() изменять формат matches таким образом, что он будет содержать как текст, так и позицию каждой ссылки внутри string. Рассмотрим пример:

Ss ■ ‘Еще один прекрасный день’;
pregjnatch (’/прекрасный/’, Ss, Smatches, PREG_OFFSET_CAPTURE); var_dump (Smatches);

Если выполнить этот сценарий, получится следующий результат:
array (1) ( [0]=>
array(2) { [0)->
string(9) "прекрасный"
[!]=> int(8)
I
)
Легко заметить, что массив Smatches теперь содержит другой массив для каждой ссылки. Последний, в свою очередь, содержит и строку совпадения, и ее позицию внутри Ss.
Другая функция семейства PCRE — это preg_match_all (), которая имеет тот же синтаксис, что и pregjnatch (), но выполняет поиск в строке всех вхождений регулярного выражения, а не только одного определенного. Ниже представлен пример:

Ss ■ ‘Прекрасный день и красота озера’; pregjnatch jail (’/красС ]+/’, Ss, Smatches); var_dump (Smatches)

Если выполнить этот сценарий, получается такой результат:
array (1) ( [0}*>
array(2) { [0]=>
string(9) “Прекрасный” [1]=>
string(6) “красота”
Как видите, Smatches содержит массив, элементы которого являются массивами, соответствующими найденным совпадениям для каждой из ссылок. В этом случае, поскольку никакая ссылка не была указана, представлен только нулевой элемент массива, но он содержит обе строки — “Прекрасный” и “красота”. В отличие от этого, если выполнить регулярное выражение, воспользовавшись функцией pregmatch (), будет возвращено только слово “Прекрасный”.
Операции поиска и замены в мире PCRE выполняются с помощью функции preg_replace {):
preg_replace (pattern, replacement, string!, limit]);
Как и ereg_replace(}, эта функция применяет регулярное выражение pattern к строке string, а затем заменяет в параметре replacement ссылки, заданные в нем. Параметр limit может применяться для ограничения максимального количества замен. Ниже приведен пример, который возвращает Marcot at tabini dot са.

$s = ‘marcot@tabini.ca’; v
echo preg_replace (’Л(\w+)@(\w+)\,(\w{2,4))/’, ‘\1 at \2 dot \3′, Ss) ;

Имейте в виду, что это — единственный способ применения pregreplace (), в котором для всей входной строки подставляется строка замены. Фактически вы можете использовать эту функцию для замены только маленькой части текста:

Ss = ‘Карандаш лежит в столе’;
echo preg_replасе (’/в/’, ‘на’, Ss) ;

Если вы полнить этот сценарий, функция preg_replace () заменит слово “в” словом “на” в строке Ss, в результате выдав Карандаш лежит на столе.
Последняя из представляемых функций — это pregsplit (), которая в определенном смысле является эквивалентом рассмотренной ранее функции explode (), с тем отличием, что она принимает регулярное выражение в качестве разделителя вместо обычной строки, а потому обладает некоторыми дополнительными возможностями:
preg_split (pattern, string!, limit!, flags]]);
Функция pregsplit {) работает, разбивая string на подстроки по разделителям, представляющим собой последовательность символов, заданную в pattern. Необязательный параметр limit может применяться для указания максимального числа разбиений. Параметр flags, с другой стороны, может использоваться для модификации поведения функции, как показано в табл. 3.2.
Рассмотрим пример использования preg_spl it О.

Ss = ‘Десять раз он звонил, и десять раз никто не ответил’; var_dump (preg_split (V[ ,]/’, Ss) ) ;
Функция explode () не подходит для этого случая, поскольку может разбить строку $s только по какому-то одному символу.

Tags: , ,

Related posts


Leave a Reply