Как заменить подстроку в найденном шаблоне, но оставив остальное как есть?
(EDIT: реальный случай, конечно, более сложный, чем приведенный ниже пример, мне нужно сопоставить события в тегах xml, поэтому я должен использовать регулярное выражение!)
Предположим, я хочу изменить происхождение буквы «X» в слове на букву «Z».
я хочу
aaXaa aaX Xaa
становиться
aaZaa aaZ Zaa
Поиск событий слов, включая «x», не является проблемой, например:
[^ X \ s] X [^ \ s]
но обычный preg_match заменяет полное совпадение, где мне нужно что-либо в шаблоне, кроме «X», чтобы оставаться таким, каким оно есть.
Какой лучший способ выполнить это в php?
Если ваше регулярное выражение соответствует только соответствующей части, не должно быть проблем, что он заменяет полное соответствие (например, preg_replace('/X/', 'Z', $string)
).
Но если вам нужно, чтобы регулярное выражение содержало части, которые не нужно заменять, вам нужно их захватить и вставить обратно:
preg_replace('/(non-replace)X(restofregex)/', '$1Z$2', $string);
Если это так просто, как заменить X
на Z
, вы также можете использовать str_replace()
, который быстрее, чем использование preg
в этом случае:
$sNew = str_replace("X", "Z", $sOld);
Попробуй это
<?php $string = 'The quick brown fox jumped over the lazy dog.'; $patterns[0] = '/quick/'; $patterns[1] = '/brown/'; $patterns[2] = '/fox/'; $replacements[2] = 'bear'; $replacements[1] = 'black'; $replacements[0] = 'slow'; echo preg_replace($patterns, $replacements, $string); ?>
Вышеприведенный пример выводит:
The bear black slow jumped over the lazy dog.
Вам действительно нужно использовать регулярное выражение для этого?
$output = str_replace('X', 'Z', $input);