Замена вхождений строки, соответствующей регулярному выражению

#php #regex

#php #регулярное выражение

Вопрос:

У меня есть следующие строки:

 $a = "test1";
$b = "testamp;nbsp;2";
$c = "testamp;<3";
$d = "testamp;4";
  

Я хотел бы заменить вхождения «amp;», за которыми следуют некоторые буквы, и заканчивать на «;».

Вывод должен быть :

 $a = "test1";
$b = "test 2";
$c = "test 3";
$d = "testamp;4";
  

Как я могу это сделать с помощью PHP?

Ответ №1:

В этом конкретном случае вам не нужно регулярное выражение, скорее всего, вам нужно декодировать HTML-объекты, и это можно сделать с помощью html_entity_decode() , как в:

 $a = html_entity_decode("test1");
$b = html_entity_decode("testamp;nbsp;2");
$c = html_entity_decode("testamp;<3");
$d = html_entity_decode("testamp;4");

var_dump($a,$b,$c,$d);
  

Комментарии:

1. Это решение возвращает "test<3" , в то время как OP нуждается "test 3" .

Ответ №2:

Используйте это:

 $x = preg_replace('/amp;[a-z] ;/', ' ', $b);
echo $x;
  

Ответ №3:

Ответ @this .lau_ — лучший вариант, но если вам нужно регулярное выражение, попробуйте это

 (amp;)([a-z]{1,4})(;)