Удаление специального символа из строки

#php

#php

Вопрос:

Я хочу удалить специальный символ @ из следующей строки

  $string="Test <a href='/group/profile/1'>@Test User</a> another test <a href='/group/profile/2'>@User Test</a>";
  

Ожидаемый результат:

  <a href='/group/profile/1'>Test User</a> another test <a href='/group/profile/2'>User Test</a>"
  

Здесь мне нужно проверить все теги привязки в строке, и мне нужно найти только теги привязки со словом profile в href и удалить @ из текста ссылки.Если в строке есть какой-либо @ внешний тег привязки, его не следует удалять, @ необходимо удалить только тег привязки.

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

1. На выходе "Test " также отсутствует начальный символ; ожидаемый?

Ответ №1:

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

 $string = preg_replace('/(<a href.*profile.*>)@/U', '$1', $string);
  

Обратите внимание на модификатор ungreedy (U).

Ответ №2:

Попробуйте:

 $string = <<<EOT

@Do not remove
Test <a href='/group/profile/1'>@Test User</a> another test <a href='/group/profile/2'>@User Test</a>
@metoo

EOT;


$string = preg_replace('/(<as . ?>.*?)(@)(.*?</a>)/','$1$3',$string);

var_dump($string);
  

Это может быть ошибкой для больших строк, хотя

http://us3.php.net//manual/en/function.preg-replace.php
http://us3.php.net/manual/en/reference.pcre.pattern.syntax.php

Ответ №3:

Попробуйте это:

//удалить @ из строки

  $string=str_replace('@','',$string);
  

//кодирование строки с использованием функции base64_encode php

  $string=base64_encode($string);
  

//декодировать строку с помощью функции base64_decode php

 echo $string=base64_decode($string);            //Expected output