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 имеют разные размеры, лишние символы в более длинном игнорируются.
strtr() может быть вызвана только с двумя аргументами. При этом ведёт себя по-новому: from должен быть массивом, содержащим пары string -> string, которые будут заменены в строке-источнике. strtr() сначала всегда ищет самое длинное совпадение и *НЕ* пытается заменить то, с чем уже работала. Примеры:
Это выведет: "hello all, I said hi",
См. также ereg_replace(). |
||||||||||
|
||||||||||
Рассмотрим проблему совпадения строки в скобках, когда допускается неограниченное
вложение скобок. Без использования рекурсии лучшее, что можно сделать, это использовать
патэрн, который совпадает на некоторую фиксированную глубину вложения. Невозможно
обработать вложения на произвольно большую глубину. В Perl 5.6 имеется экспериментальная
возможность, позволяющая (помимо прочего) выполнять рекурсию регулярных выражений.
Специальный элемент (?R) предоставлен для этого специфического case/варианта
рекурсии.
PCRE-патэрн разрешает проблему скобок (предполагая, что опция PCRE_EXTENDED
установлена так, что пробел игнорируется):
\( ( (?>[^()]+) | (?R) )* \)
Вначале он совпадает с открывающей скобкой. Затем - с любым количеством подстрок,
которые могут быть либо последовательностями не-скобок, либо рекурсивным совпадением
самого патэрна (т.е. корректно заключённой в скобки подстрокой). Наконец, идёт
закрывающая скобка.
Этот особый пример патэрна содержит вложенное бесконечное повторение, и, таким
образом, использование однократного субпатэрна для совпадения со строками из
не-скобок очень важно, когда патэрн применяется к строкам, которые не
совпадают. Например, если его применить к
(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
то он быстро даст "нет совпадений". Однако, если однократный/once-only
субпатэрн не используется, поиск совпадения будет продолжаться длительное время,
так как есть много различных способов, которыми повторения + и * могут кроить
строку-субъект, и все они должны быть проверены, прежде чем будет выдано сообщение
о неудаче поиска.
| |