Функции Язык программирования PHP

strtr

(PHP 3, PHP 4)

strtr - транслирует определённые символы.

Описание

string strtr (string str, string from, string to)

string strtr (string str, array replace_pairs)

Эта функция возвращает копию строки str, транслируя все появления каждого символа из параметра from в соответствующие символы из to и возвращая результат.

Если from и to имеют разные размеры, лишние символы в более длинном игнорируются.
Пример 1. strtr()
$addr 
= strtr($addr, "дец", "aao");

strtr() может быть вызвана только с двумя аргументами. При этом ведёт себя по-новому: from должен быть массивом, содержащим пары string -> string, которые будут заменены в строке-источнике.

strtr() сначала всегда ищет самое длинное совпадение и *НЕ* пытается заменить то, с чем уже работала.

Примеры:
$trans = array("hello" => "hi", "hi" => "hello"); echo strtr("hi 
all, I said hello", $trans) . "\n";

Это выведет: "hello all, I said hi",

Примечание: необязательные параметры to и from были введены в PHP 4.0.0.

См. также ereg_replace().


Назад Оглавление Вперёд
strtoupper Вверх substr_count

Рекурсивные патэрны

Рассмотрим проблему совпадения строки в скобках, когда допускается неограниченное вложение скобок. Без использования рекурсии лучшее, что можно сделать, это использовать патэрн, который совпадает на некоторую фиксированную глубину вложения. Невозможно обработать вложения на произвольно большую глубину. В Perl 5.6 имеется экспериментальная возможность, позволяющая (помимо прочего) выполнять рекурсию регулярных выражений. Специальный элемент (?R) предоставлен для этого специфического case/варианта рекурсии.
PCRE-патэрн разрешает проблему скобок (предполагая, что опция PCRE_EXTENDED установлена так, что пробел игнорируется):

\( ( (?>[^()]+) | (?R) )* \)

Вначале он совпадает с открывающей скобкой. Затем - с любым количеством подстрок, которые могут быть либо последовательностями не-скобок, либо рекурсивным совпадением самого патэрна (т.е. корректно заключённой в скобки подстрокой). Наконец, идёт закрывающая скобка.

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

(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()

то он быстро даст "нет совпадений". Однако, если однократный/once-only субпатэрн не используется, поиск совпадения будет продолжаться длительное время, так как есть много различных способов, которыми повторения + и * могут кроить строку-субъект, и все они должны быть проверены, прежде чем будет выдано сообщение о неудаче поиска.