Intereting Posts
Как был скомпилирован мой исполняемый php? Как выбрать из текста массива mysql и сравнить Кросс-платформенный (php-C # .NET) шифрование / дешифрование с помощью Rijndael Google Api получает адрес электронной почты пользователей Как извлечь HTTP-ссылки из абзаца и сохранить их в массиве на php Phonegap В запрошенном ресурсе присутствует заголовок «Access-Control-Allow-Origin». Происхождение 'null', следовательно, не допускает доступа CodeIgniter Validation в библиотеке не принимает обратный вызов cURL дает Не удалось разрешить хост Использование PHP для удаления выбранного элемента из раскрывающегося списка, среди прочих Как изменить имя элемента в DOM? неявное объявление переменной класса в php? как получить последний символ строки в PHP? phpMyAdmin Доступ запрещен Ошибка анализа: синтаксическая ошибка, неожиданный «endif» (T_ENDIF) в теме WordPress создание нового класса в цикле или нет в цикле?

php str_replace и \ b граница слова

Я пытаюсь использовать str_replace, но не могу понять, как использовать \ b для границы слова:

<?php $str = "East Northeast winds 20 knots"; $search = array("North", "North Northeast", "Northeast", "East Northeast", "East", "East Southeast", "SouthEast", "South Southeast", "South", "South Southwest", "Southwest", "West Southwest", "West", "West Northwest", "Northwest", "North Northwest"); $replace = array("N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"); $abbr = str_replace($search, $replace, $str); echo $abbr; // this example echoes "E Neast winds 20 knots" since \b word boundary is not used // how to apply word boundary so that is seeks the exact words to replace? // the text to replace could be anywhere (start, middle, end) of string // this example should output "ENE winds 20 knots" ?> 

Не беспокойтесь о регулярных выражениях, просто закажите свои заменяющие строки в порядке, который заменяет более длинные:

 $search = array("North Northeast", "East Northeast", "East Southeast", "South Southeast", "South Southwest", "West Southwest", "West Northwest", "North Northwest", "Northeast", "SouthEast", "Southwest", "Northwest", "North", "East", "South", "West"); $replace = array("NNE", "ENE", "ESE", "SSE", "SSW", "WSW", "WNW", "NNW", "NE", "SE", "SW", "NW", "N", "E", "S", "W"); echo str_replace($search, $replace, "East Northeast winds 20 knots"); // Output: ENE winds 20 knots 

Таким образом, вам не нужно беспокоиться о том, что East будет заменен до East Southeast .

Вы не можете использовать \ b с str_replace (). Граница слов «\ b» является допустимым якорем в регулярных выражениях. Поэтому используйте preg_replace (), это более уместно, если ваш текст поиска содержит естественный язык:

  $replace = array_combine($search, $replace); preg_replace('#\b('.implode('|',$search).')\b#e', '$replace["$1"]?:"$1"', $str) 

В противном случае любая окклюзия «E» в тексте будет заменена на «Восток». В качестве альтернативы вы могли бы по крайней мере добавить правую руку пространства в строки $ search и $ replace.