preg_replace — Выполняет поиск и замену по регулярному выражению | Руководство по PHP

Строка или массив строк для замены. Если этот параметр является строкой, а pattern является массивом, все шаблоны будут заменены этой строкой. Если и pattern и replacement являются массивами, каждый элемент pattern будет заменен соответствующим элементом из replacement. Если массив replacement содержит меньше элементов, чем массив pattern, то все лишние шаблоны из pattern будут заменены пустыми строками.

replacement может содержать ссылки вида \\n, либо (начиная с PHP 4.0.4) $n, причем последний вариант предпочтительней. Каждая такая ссылка будет заменена на подстроку, соответствующую n-ой подмаске. n может принимать значения от 0 до 99, причем ссылка \\0 (либо $0

) соответствует вхождению всего шаблона. Подмаски нумеруются слева направо, начиная с единицы. Для использования обратного слеша, его необходимо продублировать (строка PHP «\\\\»).

При замене по шаблону с использованием ссылок на подмаски может возникнуть ситуация, когда непосредственно за маской следует цифра (например, установка цифры сразу после совпавшей маски). В таком случае нельзя использовать знакомую нотацию вида \\1 для ссылки на подмаски. Запись, например, \\11, смутит preg_replace(), так как она не сможет понять, хотите ли вы использовать ссылку \\1, за которой следует цифра

1 или же вы хотите просто использовать ссылку \\11, за которой ничего не следует. Это недоразумение можно устранить, если воспользоваться конструкцией \${1}1, использующей изолированную ссылку $1, и следующую за ней цифру 1.

При использовании устаревшего модификатора e эта функция экранирует некоторые символы (а именно , «, \ и NULL) в строках, замещающих обратные ссылки. Это сделано для удостоверения корректности синтаксиса при использовании обратных ссылок внутри одинарных или двойных кавычек (например, ‘strlen(\’$1\’)+strlen(«$2»)’

). Убедитесь, что вы владеете синтаксисом обработки строк PHP для того, чтобы точно осознавать, как будет выглядеть интерпретированная строка.

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. Если в этом параметре указан модификатор
i
, будет игнорироваться регистр. Если указан модификатор x, будут игнорироваться пробелы. Если указан модификатор m, поиск совпадений будет выполняться в многострочном режиме, а ‘.’ будет совпадать с символом конца строки. Если указан модификатор p, поиск совпадений будет выполняться в режиме POSIX; символ конца строки будет рассматриваться как обычный символ. Если указан модификатор e, строка 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 или же вы хотите просто использовать ссылку

\\11, за которой ничего не следует. Это недоразумение можно устранить, если воспользоваться конструкцией ${1}1, использующей изолированную ссылку $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.

 
  1. $ something = 'df1gdf2gdf3sgdfg';

  2. $ something = preg_replace ("/ ([a-z] *) /", "X", $ something);

  3. echo $ something; // печатает XX1XX2XX3XX

Это достаточно просто, но использование модификатора e позволяет нам использовать функции PHP в параметрах замены. Следующий фрагмент кода превращает все буквы в верхний регистр в строке случайных букв с помощью PHP-функции strtoupper ().

 
  1. $ something = 'df1gdf2gdf3sgdfg';

  2. $ something = preg_replace ("/ ([a-z] *) / e", "strtoupper ('\\ 1')", $ something);

  3. echo $ something; // выводит DF1GDF2GDF3SGDFG

Вот еще один пример, но в этом случае полная строка повторяется после измененной строки.

 
  1. $ something = 'df1gdf2gdf3sgdfg';

  2. $ something = preg_replace ("/ ([a-z0-9] *) / e", "strtoupper ('\\ 1').'\\ 1' ", $ something);

  3. echo $ something; // выводит DF1GDF2GDF3SGDFGdf1gdf2gdf3sgdfg

Обратите внимание, что при использовании модификатора e важно правильно заключить строку в одинарные и двойные кавычки. потому что строка в целом анализируется как PHP, и поэтому, если вы не поместите одинарные кавычки вокруг обратных ссылок, вы получите PHP, жалующийся на константы.

Для более сложного примера я изменил функцию createTextLinks (), которая писала о недавно на сайте.Изначально функция находила любые строки URL в более крупной строке и превращала их в ссылки. Модифицированная функция теперь возвращает то же самое, за исключением того, что текст ссылки был сокращен с помощью функции corretenurl ().

 
  1. $ longurl = "есть новый сайт http://www.google.co.uk/search?aq=f&num=100&hl=en&client=firefox-a&channel=s&rls=org.mozilla%3Aen-US% 3Aofficial »;

  2. function createShortTextLinks ($ str = '') {

  3. if ($ str == '' или! Preg_match ('/ (http | www \.) \ r \ n!] +) / eim "," '' .shortenurl ('\\ 1'). ' '", $ str);

  4. $ str = preg_replace (" / ([- a-z0-9 _] + (\. [_ a-z0-9 -] +) * @ ( [a-z0-9 -] + (\. [a-z0-9 -] +) +)) / eim "," ' '. Corretenurl (' \\ 1 ').' '", $ str);

  5. $ str = preg_replace ("/ (\ &) / im" , "\\ 1amp;", $ str);

  6. return $ str;

  7. }

  8. function strlen ($ url)> 45) {

  9. return substr ($ url, 0, 30).«[...]». substr ($ url, -15);

  10. } else {

  11. вернуть url $;

  12. }

  13. }

  14. 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.

Кто лучше реализует эффективность? Это связано с проблемой скорости. Некоторые тесты показали, что скорость 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

$ string = '15 апреля 2003 г.';
$ шаблон = '/ (\ w +) (\ d +), (\ d +) / i';
$ замена = '$ {1} 1, $ 3';
echo preg_replace ($ шаблон, $ замена, $ строка);
?>

// Powyższy przykład wyświetli:

April1.2003

Пример № 2 Коржистание с таблицами индексованыч с preg_replace ()

$ 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.

$ str = 'foo o';
$ str = preg_replace ('/ \ s \ s + /', '', $ str);
// Перейти к teraz 'foo o'
echo $ str;
?>

// Пример № 6 Корзыстание с параметром count

$ count = 0;

echo preg_replace (array ('/ \ d /', '/ \ s /'), '*', 'xp 4 to', -1, $ count);
echo $ count; // 3
?>

// Powyższy przykład wyświetli:

XP *** до
3

.