2016-06-24 4 views
1

Как заменить слово «кот» в данной строке на «ФЕЛИКС», но не тогда, когда за ним следует специальный символ, как «- или _ или:»Регулярное выражение: заменить слово за исключением случаев, а затем тире

пример:

«моя кошка голодная все время» => «мой Феликс голодный все время»

«продукты, кот-1547 и кот: 154 является Disponible сейчас» => «продукты кошки-1547 и кошка: 154 сейчас »

спасибо

ответ

0

Используйте отрицательное опережения вместе с границами слова:

/\bcat\b(?![-:])/ 

См regex demo

Узор объяснение:

  • \b - ведущий границы слова (чтобы избежать согласования cat в tomcat)
  • cat - буквальная строка cat
  • \b - конечная граница слова (т. следующий символ должен быть не буква, не цифра и не символ подчеркивания, и это предотвращает соответствие cat в catwalk)
  • (?![-:]) - это отрицательный предпросмотр не проходит матч, если в - или :немедленно следует за cat.

PHP demo:

$re = '~\bcat\b(?![-:])~'; 
$str = "my cat is hungry all the time\nthe products cat-1547 and cat:154 are disponible now"; 
$subst = "Felix"; 
$result = preg_replace($re, $subst, $str); 
echo $result; 
+0

спасибо, что он работает, а также спасибо за демонстрацию – mostafa

+0

Рад, что это сработало для вас. Пожалуйста, подумайте о принятии ответа (см. [Как принять ответы SO]] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)). –

0

В питона вы можете:

(cat)(?![-:]) 

?! проверяет, что за выражением не следует то, что после?!

Смежные вопросы