preg_replace — Выполняет поиск и замену по регулярному выражению | Руководство по PHP
Строка или массив строк для замены. Если этот параметр является
строкой, а pattern
является массивом,
все шаблоны будут заменены этой строкой. Если и pattern
и replacement
являются массивами, каждый элемент pattern
будет
заменен соответствующим элементом из replacement
.
Если массив replacement
содержит меньше
элементов, чем массив pattern
, то все
лишние шаблоны из pattern
будут
заменены пустыми строками.
replacement
может содержать ссылки вида \\n, либо
(начиная с PHP 4.0.4) $n,
причем последний вариант предпочтительней. Каждая такая ссылка
будет заменена на подстроку, соответствующую
n-ой подмаске.
n может принимать значения от 0
до 99, причем ссылка \\0 (либо $0
При замене по шаблону с использованием ссылок на подмаски
может возникнуть ситуация, когда непосредственно за маской
следует цифра (например, установка цифры сразу после совпавшей маски).
В таком случае нельзя использовать знакомую нотацию вида \\1 для ссылки на подмаски.
Запись, например, \\11, смутит preg_replace(), так как она не сможет понять,
хотите ли вы использовать ссылку \\1, за
которой следует цифра
При использовании устаревшего модификатора e эта функция экранирует некоторые символы (а именно ‘, «, \ и NULL) в строках, замещающих обратные ссылки. Это сделано для удостоверения корректности синтаксиса при использовании обратных ссылок внутри одинарных или двойных кавычек (например, ‘strlen(\’$1\’)+strlen(«$2»)’
PHP: mb_ereg_replace — Manual
(PHP 4 >= 4.2.0, PHP 5, PHP 7)
mb_ereg_replace — Осуществляет замену по регулярному выражению с поддержкой многобайтовых кодировок
Описание
string mb_ereg_replace ( string $pattern
, string $replacement
, string $string
[, string $option
= «msr»
] )
Сканирует строку string
для поиска совпадений с pattern
replacement
Список параметров
-
pattern
Шаблон регулярного выражения.
В
pattern
могут использоваться многобайтовые символы.-
replacement
Текст замены.
-
string
Проверяемая строка string.
-
option
- Условие совпадения может быть установлено параметром
option
. Если в этом параметре указан модификаторreplacement
будет вычисляться как выражение PHP.
Возвращаемые значения
Результирующая строка (string) в случае успеха, или FALSE
Список изменений
Версия | Описание |
---|---|
7.1.0 | Модификатор e объявлен устаревшим. |
Примечания
ВниманиеЗамечание:
Для этой функции будет использована внутренняя кодировка или кодировка, установленная функцией mb_regex_encoding().
Никогда не используйте модификатор e при работе с данными, полученными из недостоверных источников. Не выполняется никакого автоматического экранирования этих данных (в отличие от preg_replace()). Неучитывание данных требований, скорее всего, создаст уязвимость выполнения удаленного кода в вашем приложении.
Смотрите также
- mb_regex_encoding() — Set/Get character encoding for multibyte regex
- mb_eregi_replace() — Осуществляет замену по регулярному выражению с поддержкой многобайтовых символов без учета регистра
PHP — preg_replace — (PHP 4, PHP 5, PHP 7) preg_replace — выполняет поиск и замену регулярного выраже
Строка или массив со строками для замены. Если этот параметр является строкой, а параметр pattern
— массивом, все шаблоны будут заменены этой строкой. Если и pattern
и параметры replacement
являются массивами, каждый pattern
будет заменен replacement
аналогом. Если в массиве replacement
меньше элементов, чем в массиве pattern
, любой дополнительный pattern
s будет заменен пустой строкой.
replacement
может содержать ссылки в форме \n
или $n
, причем последняя форма является предпочтительной. Каждая такая ссылка будет заменена текстом, захваченным n-м шаблоном в скобках. n может быть от 0 до 99, а \0
или $0
относятся к тексту, соответствующему всему шаблону. Открывающие скобки считаются слева направо (начиная с 1), чтобы получить номер подшаблона захвата. Обратите внимание, что может потребоваться экранирование обратных косых черт в строковых литералах.
При работе с шаблоном замены, где за обратной ссылкой сразу же следует другое число (например, размещение буквального числа сразу после согласованного шаблона), вы не можете использовать знакомую нотацию \1
для своей обратной ссылки. \11
, например, запутает preg_replace (), поскольку он не знает, хотите ли вы, чтобы обратная ссылка \1
сопровождалась литералом 1
, или обратная ссылка \11
за которой не следовало ничего. В этом случае решение состоит в использовании ${1}1
. Это создает изолированную обратную ссылку на $1
, оставляя 1
как литерал.
При использовании устаревшего модификатора e
эта функция экранирует некоторые символы (а именно '
, "
, \
и NULL) в строках, которые заменяют обратные ссылки. Это делается для того, чтобы гарантировать отсутствие синтаксических ошибок в результате использования обратной ссылки в одинарных или двойных кавычках ( например, 'strlen(\'$1\')+strlen("$2")'
). Убедитесь, что вы знаете синтаксис строки PHP, чтобы точно знать, как будет выглядеть интерпретируемая строка.
Выполняет поиск и замену по регулярному выражению
Строка или массив строк для замены. Если этот параметр является
строкой, а pattern
является массивом,
все шаблоны будут заменены этой строкой. Если и pattern
и replacement
являются массивами, каждый элемент pattern
будет
заменен соответствующим элементом из replacement
replacement
содержит меньше
элементов, чем массив pattern
, то все
лишние шаблоны из pattern
будут
заменены пустыми строками. replacement
может содержать ссылки вида \\n, либо $n,
причем последний вариант предпочтительней. Каждая такая ссылка
будет заменена на подстроку, соответствующую
n-ой подмаске.
n может принимать значения от 0
до 99, причем ссылка \\0 (либо $0) соответствует вхождению всего шаблона.
Подмаски нумеруются слева направо, начиная с единицы.
Для использования обратного слеша, его необходимо продублировать
(строка PHP
При замене по шаблону с использованием ссылок на подмаски
может возникнуть ситуация, когда непосредственно за маской
следует цифра (например, установка цифры сразу после совпавшей маски).
В таком случае нельзя использовать знакомую нотацию вида \\1 для ссылки на подмаски.
Запись, например, \\11, смутит preg_replace(), так как она не сможет понять,
хотите ли вы использовать ссылку \\1, за
которой следует цифра 1 или же вы хотите
просто использовать ссылку
При использовании устаревшего модификатора e эта функция экранирует некоторые символы (а именно ‘, «, \ и NULL) в строках, замещающих обратные ссылки. Это сделано для удостоверения корректности синтаксиса при использовании обратных ссылок внутри одинарных или двойных кавычек (например, ‘strlen(\’$1\’)+strlen(«$2»)’). Убедитесь, что вы владеете синтаксисом обработки строк PHP для того, чтобы точно осознавать, как будет выглядеть интерпретированная строка.
PHP — preg_replace — (PHP 4, PHP 5, PHP 7) preg_replace: регулярная реализация запроса
Кадена или матрица с каденами для reemplazar. Si este parámetro es una cadena y el parámetro de pattern
es una matriz, todos los patrones serán reemplazados por esa cadena. Si tanto el pattern
como replace
parámetros de reemplazo son matrices, cada pattern
será reemplazado por la contraparte de replace
.Si hay menos elementos en la matriz de replace
que en la matriz de pattern
, cualquier pattern
adicional será reemplazado por una cadena vacía.
замена
puede contener referencias de la forma \ n
или $ n
, siendo la última forma la предпочтение. Cada una de estas referencias será reemplazada por el texto capturado por el n-ésimo patrón entre paréntesis. n puede ser de 0 a 99, y \ 0
o $ 0
refiere al texto que совпадает с полным патроном.Los paréntesis de apertura se cuentan de izquierda a derecha (comenzando desde 1) para obtener el número del subpatrón de captura. Tenga en cuenta que es posible que sea necesario escapar de las barras Invertidas en los literales de cadena.
Cuando se trabaja con un patrón de reemplazo donde una referencia inversa es seguida inmediatamente por otro número (es decir, colocar un número literal inmediatamente después de un patrón matching), no puede usarravers not suarióa usarversia .
\ 11
, por ejemplo, confundiría preg_replace () ya que no sabe si desea la referencia inversa \ 1
seguida de un 1
literal, o la referencia inversa \ 11
seguida de nada. En este caso, la solución es usar $ {1} 1
. Esto crea una referencia inversa aislada de $ 1
, dejando el 1
como literal.
Cuando se usa el modificador e
obsoleto, esta función escapa algunos caracteres (a saber, '
, "
, \
y NULL) en las cadenas que reemplazan invers reasferencias.Esto se hace para garantizar que no surjan errores de sintaxis por el uso de referencias inversas con comillas simples o dobles (например, 'strlen (\' $ 1 \ ') + strlen ("$ 2")'
). Используйте синтаксис каден PHP для точной игры, когда вам нужна интерпретация кадены.
Использование модификатора e в PHP preg_replace
PHP-функция preg_replace () сама по себе обладает мощными функциональными возможностями, но дополнительную глубину можно добавить с помощью модификатора e.Возьмите следующий фрагмент кода, который просто выбирает буквы в строке и заменяет их буквой X.
$ something = 'df1gdf2gdf3sgdfg';
$ something = preg_replace ("/ ([a-z] *) /", "X", $ something);
echo $ something; // печатает XX1XX2XX3XX
Это достаточно просто, но использование модификатора e позволяет нам использовать функции PHP в параметрах замены. Следующий фрагмент кода превращает все буквы в верхний регистр в строке случайных букв с помощью PHP-функции strtoupper ().
$ something = 'df1gdf2gdf3sgdfg';
$ something = preg_replace ("/ ([a-z] *) / e", "strtoupper ('\\ 1')", $ something);
echo $ something; // выводит DF1GDF2GDF3SGDFG
Вот еще один пример, но в этом случае полная строка повторяется после измененной строки.
$ something = 'df1gdf2gdf3sgdfg';
$ something = preg_replace ("/ ([a-z0-9] *) / e", "strtoupper ('\\ 1').'\\ 1' ", $ something);
echo $ something; // выводит DF1GDF2GDF3SGDFGdf1gdf2gdf3sgdfg
Обратите внимание, что при использовании модификатора e важно правильно заключить строку в одинарные и двойные кавычки. потому что строка в целом анализируется как PHP, и поэтому, если вы не поместите одинарные кавычки вокруг обратных ссылок, вы получите PHP, жалующийся на константы.
Для более сложного примера я изменил функцию createTextLinks (), которая писала о недавно на сайте.Изначально функция находила любые строки URL в более крупной строке и превращала их в ссылки. Модифицированная функция теперь возвращает то же самое, за исключением того, что текст ссылки был сокращен с помощью функции corretenurl ().
$ longurl = "есть новый сайт http://www.google.co.uk/search?aq=f&num=100&hl=en&client=firefox-a&channel=s&rls=org.mozilla%3Aen-US% 3Aofficial »;
function createShortTextLinks ($ str = '') {
if ($ str == '' или! Preg_match ('/ (http | www \.) \ r \ n!] +) / eim "," '' .shortenurl ('\\ 1'). ' a> '", $ str);
$ str = preg_replace (" / ([- a-z0-9 _] + (\. [_ a-z0-9 -] +) * @ ( [a-z0-9 -] + (\. [a-z0-9 -] +) +)) / eim "," ' '. Corretenurl (' \\ 1 ').' '", $ str);
$ str = preg_replace ("/ (\ &) / im" , "\\ 1amp;", $ str);
return $ str;
}
function strlen ($ url)> 45) {
return substr ($ url, 0, 30).«[...]». substr ($ url, -15);
} else {
вернуть url $;
}
}
echo createShortTextLinks ($ longurl);
Функция подстановки строки PHP str_replace быстрее, чем preg_replace
Функция подстановки строки PHP, есть str_replace (), Str_ireplace (), Substr_replace (), Preg_replace (), STRTR () и т. Д., Программист при написании программ, часто выбирает одну или несколько в соответствии со своими привычками и фактическими ситуация.Хотя эти функции имеют функцию подстановки строк, они различаются от грамматики к функциям, скорости и эффективности, поэтому они недоступны ни в какой ситуации.
Разница между str_replace () и Preg_replace ()
В функции подстановки строк использование str_replace () является самым высоким, его использование относительно просто, а коэффициент использования preg_replace () сравнительно низок, потому что он требует от вас знания того, как писать регулярные выражения, и регулярные выражения. выражения иногда нелегко написать.
Str_replace () и preg_replace () различны, Str_replace заменяется (находит), содержимое фиксировано, ОК, конечно, можно использовать переменные, но переменная также представляет фиксированное, определенное содержимое, например, что можно сделать для замены всего \ n
и в других случаях. Содержимое Preg_replace заменяется правилами, такими как возможность замены всего содержимого (HTML-код) между <и>. Конечно, preg_replace также может использоваться для замены фиксированного содержимого.
Кто лучше реализует эффективность? Это связано с проблемой скорости. Некоторые тесты показали, что скорость str_replace выше, чем preg_replace, но кажется, что никто не сказал, что это в 4 раза быстрее. 10w раз результаты замены двух слов показывают, что: str_replacece занимает 0,38 секунды, preg_replace занимает 0,97 секунды.
Разница между str_replace () и Str_ireplace ()
Использование Str_replace () такое же, как и Str_ireplace (), где разница только в том, что str_replace () чувствительна к регистру, а str_ireplace () не чувствительна к регистру.
Str_replace () и STRTR () кто быстрее?
Str_replace () и STRTR () эффективность реализации двух, многие люди говорят, что strtr (), чем Str_replace () быстрее, но некоторые люди доказали на примере Str_replace () быстрее, чем STRTR ().
Когда пользователь сети тестирует Strtr () в использовании Strtr (String, array), он работает медленнее, чем str_replace. 10w раз результаты замены двух слов показывают, что str_replacece () занимает 0,38 секунды, а STRTR () - 0.52сек.
PHP программа, есть много функций, которые могут быть реализованы с различными функциями, в дополнение к вышеупомянутому, возможно, не были замечены, например, давным-давно, чтобы поделиться статьей:
PHP определяет длину строки isset () быстрее, чем strlen ()
Итак, когда мы выбираем, какую функцию использовать, нам лучше знать, насколько эффективны эти функции, чтобы написать более эффективную программу.
3 мая Цена на нефть Последние тенденции График "Международные цены на нефть": http: // licai.daiyuline.com/yyjg/331.html
3 мая Анализ фондового рынка и прогноз «новичок в знаниях об акциях»: http://licai.daiyuline.com/gupiao/330.html
Большой отскок сегодня не будет "Octopus Investment Banking": http://licai.daiyuline.com/gupiao/329.html
Функция подстановки строк PHP str_replace быстрее, чем preg_replace
Функций PHP preg_replace
preg_replace ($ pattern, $ replacement, $ subject [, int $ limit [, int & $ count]])Wyszukuje $ subject (temat) pasującego do $ patern (wzoru) i zastępuje je zmienną $ замена.
Параметры
- узор
Wzorzec do wyszukania. Może być cigiem lub tablicą łańcuchów znaków
E modyfikatora powoduje preg_replace () traktowanie parameter zastępczego (замена $) jako kod PHP, po odpowiednich odniesieniach substytucji jest on wykonywany. Wskazówka: upewnij się, e zastąpienie stanowi ważny ciąg kodu PHP, PHP, inaczej będzie skarżyć do parse error w linii zawierającej preg_replace ().
- замена
ciąg znaków lub tablica ciągóww do zastąpienia. Jeżeli ten parameter jest ciągiem i parameter pattern (wzór) jest tablicą, wszystkie modele zostaną zastąpione przez ten ciąg. Jeżeli oba parameter pattern (wzór) i replace (zastąpienie) są tablicą, pattern (wzór) zostanie zastąpiony przez replace (zastąpienie) . Jeśli istnieje mniej elementów w tablicy zastąpienia niż wstrukturze tablicy, każdy dodatkowy wzór s zostanie zastąpiony przez pusty ciąg.
- subject
ciąg znaków lub tablica cigów do wyszukania i zastępienia - limit
Maksymalna możliwa zastępstw dla każdego wzoru w odniesieniu do każdego przedmiotu ciągu. Domyślna wartość до -1 (bez ograniczeń). - кол-во
Jeśli określony, zmienna ta zostanie wypełniona liczbą wykonanych zastępstw.
Zwracane wartości
preg_replace_callback () zwraca tablicę, jeżeli parameter $ subject jest tablicą, lub ciągiem.
// Пример # 1 użycie zwrotu według numerów listy
Php
$ string = '15 апреля 2003 г.';
$ шаблон = '/ (\ w +) (\ d +), (\ d +) / i';
$ замена = '$ {1} 1, $ 3';
echo preg_replace ($ шаблон, $ замена, $ строка);
?>
// Powyższy przykład wyświetli:
April1.2003
Пример № 2 Коржистание с таблицами индексованыч с preg_replace ()
Php
$ string = 'Szybład noczywyski.';
$ шаблоны [0] = '/ szybki /';
$ паттерны [1] = '/ brązowy /';
$ patterns [2] = '/ лис /';
$ replacements [2] = 'niedźwiedź';
$ replacements [1] = 'czarny';
$ replacements [0] = 'wolny';
echo preg_replace ($ patterns, $ replacements, $ string);
?>
// Powyższy przykład wyświetli:
Czarny Niedźwiedź powoli skoczył nad leniwym psem.
// Przez ksorting (posortowanie) wzorca, powinniśmy dostać to, co chcieliśmy.>] *>) / e ",
"'\\ 1'.strtoupper (' \\ 2 ').' \\ 3 '",
$ html_body);
?>
// To kapitalizuje wszystkie znaczniki HTML w tekście wejściowym
// Пример # 5 usuwanie spacji
// Ten przykład usunie nadmiar spacji z łańcucha.
Php
$ str = 'foo o';
$ str = preg_replace ('/ \ s \ s + /', '', $ str);
// Перейти к teraz 'foo o'
echo $ str;
?>
// Пример № 6 Корзыстание с параметром count
Php
$ count = 0;
echo preg_replace (array ('/ \ d /', '/ \ s /'), '*', 'xp 4 to', -1, $ count);
echo $ count; // 3
?>
// Powyższy przykład wyświetli:
XP *** до
3