Замените слова или словосочетания с помощью регулярного выражения PHP - PullRequest
4 голосов
/ 22 ноября 2011

У меня есть карта для замены слов:

$map = array(
  'word1' => 'replacement1',
  'word2 blah' => 'replacement 2',
  //...
);

Мне нужно заменить слова в строке. Но замена должна выполняться только тогда, когда строка является словом:

  • Это не в середине какого-то другого слова ex. textword1 не будет заменен на replace1 , поскольку он является частью другого токена.
  • Разделители должны быть сохранены, но слова до / после них должны быть заменены.

Я мог бы разбить строку с регулярным выражением на слова, но это не работает, когда будут отображены значения с несколькими токенами (например, word2 blah ).

1 Ответ

5 голосов
/ 22 ноября 2011
$map = array(   'foo' => 'FOO',
                'over' => 'OVER');

// get the keys.
$keys = array_keys($map);

// get the values.
$values = array_values($map);

// surround each key in word boundary and regex delimiter
// also escape any regex metachar in the key
foreach($keys as &$key) {
        $key = '/\b'.preg_quote($key).'\b/';
}

// input string.    
$str = 'Hi foo over the foobar in stackoverflow';

// do the replacement using preg_replace                
$str = preg_replace($keys,$values,$str);

Посмотреть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...