Intereting Posts
24-часовое приложение для Android-приложений с веб-сервером PHP Как увеличить время истечения срока действия сеанса в режиме cakephp Auth Как долго соединение с базой данных PHP MySQL остается активным? Необходима помощь в php-массиве – если текущий элемент массива = «последний или первый элемент», то «сделайте что-нибудь», Проверка, является ли строка двойной или нет Получение полного пути поля загрузки файла в форме в PHP mysql зажимает определенные символы и mssql не Алгоритм поиска * в PHP Как решить фатальную ошибку в php PHP передать HTML-строку для создания ZIP-архива Генерировать заголовок динамически, чтобы отобразить запрошенный файл Как выполнить поиск символа в любом порядке (12 букв, из которых 6 должно быть слово) с PHP? isset () vs strlen () – вычисление быстрой / четкой длины строки PHP – помощь с моей рекурсивной функцией на основе REGEX Проверка формы отправки – PHP

str_replace: совпадение всего слова

Поскольку str_replace() совпадает с «: Name» в «: Name: Name_en», я хочу совместить результаты только для всего слова. Из-за этого я хотел переключиться на preg_replace() .

 $str = ":Name :Name_en"; echo $str . chr(10); $str = preg_replace('/\b' . ':Name' . '\b/i', '"Test"', $str); echo $str; 

Но это не работает из-за толстой кишки. Никакой замены не происходит. Как будет выглядеть RegExp?

\b – граница слова. Но я думаю, что двоеточие не принадлежит к такой границе слова.

Вам не нужна граница слова в начале строки:

 $str = preg_replace('/:Name\b/i', '"Test"', $str); 

Если вы используете PHP 5+, вы все равно можете использовать str_replace.

 $str = ":Name :Name_en"; echo $str . chr(10); // The final int limits the function to a single replace. $str = str_replace(':Name', '"Test"', $str, 1); echo $str; 

Если вы хотите заменить несколько ключевых слов, которые являются ассоциативными, что-то вроде словаря или заполнителей, вы можете использовать это в соответствии с вашим шаблоном регулярного выражения:

 $words=array("_saudation_"=>"Hello", "_animal_"=>"cat", "_animal_sound_"=>"MEooow"); $source=" _saudation_! My Animal is a _animal_ and it says _animal_sound_ , _no_match_"; echo (preg_replace_callback("/\b_(\w*)_\b/", function($match) use ($words) { if(isset($words[$match[0]])){ return ($words[$match[0]]);}else{ return($match[0]);}}, $source)); 

Возврат: Привет! My Animal – кошка, и она говорит, что MEooow, _no_match_

Обратите внимание, что, хотя «_no_match_» не имеет перевода, он будет соответствовать во время регулярного выражения, но сохранит его ключ.