Php заменить массив строк

preg_replace

Выполняет поиск совпадений в строке subject с шаблоном pattern и заменяет их на replacement .

Для соответствия точной строке, а не шаблону, вместо этой функции используйте функцию str_replace() или str_ireplace() .

Список параметров

Искомый шаблон. Может быть как строкой, так и массивом строк.

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

replacement может содержать ссылки вида \ n , либо $ n , причём последний вариант предпочтительней. Каждая такая ссылка будет заменена на подстроку, соответствующую n -ой подмаске. n может принимать значения от 0 до 99, причём ссылка \0 (либо $0 ) соответствует вхождению всего шаблона. Подмаски нумеруются слева направо, начиная с единицы. Обратите внимание, что обратные слеши в строке ( string ) литералы могут требовать экранирования.

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

Читайте также:  Css all classes that start with

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

Строка или массив строк для поиска и замены.

Если subject является массивом, то поиск с заменой осуществляется для каждого элемента массива subject , а возвращаемое значение также будет являться массивом.

Если параметр subject является ассоциативным массивом, ключи будут сохранены в возвращаемом значении.

Максимально возможное количество замен каждого шаблона для каждой строки subject . По умолчанию равно -1 (без ограничений).

Если указана, то эта переменная будет заполнена количеством произведённых замен.

Возвращаемые значения

preg_replace() возвращает массив, если параметр subject является массивом, иначе возвращается строка.

Если найдены совпадения, возвращается новая версия subject , иначе subject возвращается нетронутым, в случае ошибки возвращается null .

Ошибки

Использование модификатора «\e» является ошибкой; в этом случае выдаётся ошибка уровня E_WARNING ;.

Если переданный шаблон регулярного выражения не компилируется в допустимое регулярное выражение, выдаётся ошибка уровня E_WARNING .

Примеры

Пример #1 Использование подмасок, за которыми следует цифра

$string = ‘April 15, 2003’ ;
$pattern = ‘/(\w+) (\d+), (\d+)/i’ ;
$replacement = ‘$1,$3’ ;
echo preg_replace ( $pattern , $replacement , $string );
?>

Результат выполнения данного примера:

Пример #2 Использование массивов с числовыми индексами в качестве аргументов функции preg_replace()

$string = ‘The quick brown fox jumps over the lazy dog.’ ;
$patterns = array();
$patterns [ 0 ] = ‘/quick/’ ;
$patterns [ 1 ] = ‘/brown/’ ;
$patterns [ 2 ] = ‘/fox/’ ;
$replacements = array();
$replacements [ 2 ] = ‘bear’ ;
$replacements [ 1 ] = ‘black’ ;
$replacements [ 0 ] = ‘slow’ ;
echo preg_replace ( $patterns , $replacements , $string );
?>

Результат выполнения данного примера:

The bear black slow jumps over the lazy dog.

Отсортировав по ключам шаблоны и замены, получаем желаемый результат:

ksort ( $patterns );
ksort ( $replacements );
echo preg_replace ( $patterns , $replacements , $string );
?>

Результат выполнения данного примера:

The slow black bear jumps over the lazy dog.

Пример #3 Замена по нескольким шаблонам

Результат выполнения данного примера:

Пример #4 Чистка пробелов

Этот пример вычищает лишние пробелы в строке.

$str = ‘foo o’ ;
$str = preg_replace ( ‘/\s\s+/’ , ‘ ‘ , $str );
// Это теперь будет ‘foo o’
echo $str ;
?>

Пример #5 Использование параметра count

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

Результат выполнения данного примера:

Примечания

Замечание:

При использовании массивов в pattern и replacement , ключи обрабатываются в том порядке, в котором они находятся в массиве. Этот порядок не всегда совпадает с числовым порядком индексов. Если вы используете индексы для сопоставления друг с другом нужного pattern и replacement , то вам необходимо прогнать через функцию ksort() оба массива перед использованием preg_replace() .

Замечание:

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

$p = array( ‘/a/’ , ‘/b/’ , ‘/c/’ );
$r = array( ‘b’ , ‘c’ , ‘d’ );
print_r ( preg_replace ( $p , $r , ‘a’ ));
// prints d
?>

Смотрите также

  • Регулярные выражения PCRE
  • preg_quote() — Экранирует символы в регулярных выражениях
  • preg_filter() — Производит поиск и замену по регулярному выражению
  • preg_match() — Выполняет проверку на соответствие регулярному выражению
  • preg_replace_callback() — Выполняет поиск по регулярному выражению и замену с использованием callback-функции
  • preg_split() — Разбивает строку по регулярному выражению
  • preg_last_error() — Возвращает код ошибки выполнения последнего регулярного выражения PCRE
  • str_replace() — Заменяет все вхождения строки поиска на строку замены

User Contributed Notes 9 notes

Because i search a lot 4 this:

The following should be escaped if you are trying to match that character

Special Character Definitions
\ Quote the next metacharacter
^ Match the beginning of the line
. Match any character (except newline)
$ Match the end of the line (or before newline at the end)
| Alternation
() Grouping
[] Character class
* Match 0 or more times
+ Match 1 or more times
? Match 1 or 0 times
Match exactly n times
Match at least n times
Match at least n but not more than m times
More Special Character Stuff
\t tab (HT, TAB)
\n newline (LF, NL)
\r return (CR)
\f form feed (FF)
\a alarm (bell) (BEL)
\e escape (think troff) (ESC)
\033 octal char (think of a PDP-11)
\x1B hex char
\c[ control char
\l lowercase next char (think vi)
\u uppercase next char (think vi)
\L lowercase till \E (think vi)
\U uppercase till \E (think vi)
\E end case modification (think vi)
\Q quote (disable) pattern metacharacters till \E
Even More Special Characters
\w Match a «word» character (alphanumeric plus «_»)
\W Match a non-word character
\s Match a whitespace character
\S Match a non-whitespace character
\d Match a digit character
\D Match a non-digit character
\b Match a word boundary
\B Match a non-(word boundary)
\A Match only at beginning of string
\Z Match only at end of string, or before newline at the end
\z Match only at end of string
\G Match only where previous m//g left off (works only with /g)

To split Pascal/CamelCase into Title Case (for example, converting descriptive class names for use in human-readable frontends), you can use the below function:

function expandCamelCase ( $source ) return preg_replace ( ‘/(?>
?>

Before:
ExpandCamelCaseAPIDescriptorPHP5_3_4Version3_21Beta
After:
Expand Camel Case API Descriptor PHP 5_3_4 Version 3_21 Beta

If you would like to remove a tag along with the text inside it then use the following code.

$string = preg_replace ( ‘/(.+?)+()/i’ , » , $string );
?>

This will results a » My String»

How to replace all comments inside code without remove crln = \r\n or cr \r each line?

is;huge
=======================================================================
visualizing in a hex viewer .. to_check_with_a_hex_viewer.txt .
t h i s ; LF TAB n o p e CR LF CR LF i s ; h u g e CR LF
74 68 69 73 3b 0a 09 6e 6f 70 65 0d 0a 0d 0a 69 73 3b 68 75 67 65 0d 0a
I used F3 (viewer + options 3: hex) in mythical TOTAL COMMANDER!
=======================================================================
*/

echo ‘


' ;
echo $txt_target ;
echo '

‘ ;

// a single line ‘//’ comments
$txt_target = preg_replace ( ‘![ \t]*//.*[ \t]*!’ , » , $txt_target );

// /* comment */
$txt_target = preg_replace ( ‘/\/\*([^\/]*)\*\/(\s+)/smi’ , » , $txt_target );
echo ‘


' ;
echo $txt_target ;
echo '

‘ ;

file_put_contents ( ‘to_check_with_a_hex_viewer.txt’ , $txt_target );

Источник

str_replace

Эта функция возвращает строку или массив, в котором все вхождения search в subject заменены на replace .

Если не нужны сложные правила поиска/замены (например, регулярные выражения), использование этой функции предпочтительнее preg_replace() .

Список параметров

Если search и replace — массивы, то str_replace() использует каждое значение из соответствующего массива для поиска и замены в subject . Если в массиве replace меньше элементов, чем в search , в качестве строки замены для оставшихся значений будет использована пустая строка. Если search — массив, а replace — строка, то эта строка замены будет использована для каждого элемента массива search . Обратный случай смысла не имеет.

Если search или replace являются массивами, их элементы будут обработаны от первого к последнему.

Искомое значение, также известное как needle (иголка). Для множества искомых значений можно использовать массив.

Значение замены, будет использовано для замены искомых значений search . Для множества значений можно использовать массив.

Строка или массив, в котором производится поиск и замена, также известный как haystack (стог сена).

Если subject является массивом, то поиск с заменой будет осуществляться над каждым элементом subject , а результатом функции также будет являться массив.

Если передан, то будет установлен в количество произведенных замен.

Возвращаемые значения

Эта функция возвращает строку или массив с замененными значениями.

Примеры

Пример #1 Примеры использования str_replace()

// присваивает: Hll Wrld f PHP
$vowels = array( «a» , «e» , «i» , «o» , «u» , «A» , «E» , «I» , «O» , «U» );
$onlyconsonants = str_replace ( $vowels , «» , «Hello World of PHP» );

// присваивает: You should eat pizza, beer, and ice cream every day
$phrase = «You should eat fruits, vegetables, and fiber every day.» ;
$healthy = array( «fruits» , «vegetables» , «fiber» );
$yummy = array( «pizza» , «beer» , «ice cream» );

$newphrase = str_replace ( $healthy , $yummy , $phrase );

// присваивает: 2
$str = str_replace ( «ll» , «» , «good golly miss molly!» , $count );
echo $count ;
?>

Пример #2 Примеры потенциальных трюков с str_replace()

// Порядок замены
$str = «Строка 1\nСтрока 2\rСтрока 3\r\nСтрока 4\n» ;
$order = array( «\r\n» , «\n» , «\r» );
$replace = ‘
‘ ;

// Обрабатывает сначала \r\n для избежания их повторной замены.
echo $newstr = str_replace ( $order , $replace , $str );

// Выводит F, т.к. A заменяется на B, затем B на C, и так далее.
// В итоге E будет заменено F, так как замена происходит слева направо.
$search = array( ‘A’ , ‘B’ , ‘C’ , ‘D’ , ‘E’ );
$replace = array( ‘B’ , ‘C’ , ‘D’ , ‘E’ , ‘F’ );
$subject = ‘A’ ;
echo str_replace ( $search , $replace , $subject );

// Выводит: яблорехкорех орех (по вышеуказанной причине)
$letters = array( ‘я’ , ‘о’ );
$fruit = array( ‘яблоко’ , ‘орех’ );
$text = ‘я о’ ;
$output = str_replace ( $letters , $fruit , $text );
echo $output ;
?>

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Замечание о порядке замены

Так как str_replace() осуществляет замену слева направо, то при использовании множественных замен она может заменить ранее вставленное значение на другое. Смотрите также примеры на этой странице.

Замечание:

Эта функция чувствительна к регистру. Используйте str_ireplace() для замены, нечувствительной к регистру.

Смотрите также

  • str_ireplace() — Регистронезависимый вариант функции str_replace
  • substr_replace() — Заменяет часть строки
  • preg_replace() — Выполняет поиск и замену по регулярному выражению
  • strtr() — Преобразует заданные символы или заменяет подстроки

Источник

Оцените статью