Убрать из url все круглые скобки с помощью регулярного выражения и preg_replace
Есть функция с регулярным выражением, для создания ссылок в постах и есть в ней проблема, если поставить в середине ссылки круглую скобку, то она становиться частью ссылки и переход осуществляется на 404.
Пример
https://nimbusweb.me/s/share/3130667/59rpygxll4mm4ul5so()t
Убрать скобки в начале и в конце у меня получилось. Как убрать все круглые скобки не понимаю, перебрал кучу вариантов , но нужный результат так и не получил.
Спасибо за ответы!
private function liveLinks(){
$reg_exUrl = '@(http(s)?://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s]+[^$\(\)]+)@';
return preg_replace($reg_exUrl, '<a href="http$2://$3">$0</a>', $this->text);
}
Ответы (2 шт):
str_replace(')', '', str_replace('(', '', $yourUrl));
Можно и без регулярки справиться, хотя и считаю, что как раз регулярное выражение под данную задачу - не комильфо.
Используйте функцию preg_replace_callback, в которой вторым аргументом может быть анонимная функция обратного вызова, принимающей в качестве аргумента объект совпадения. Внутри этой функции можно обработать каждую необходимую группу, а потом собрать строку замены заново:
function liveLinks($text){
$trans = array("(" => "", ")" => "");
$reg_exUrl = '@(http(s)?://)?(([a-zA-Z])([-\w]+\.)+([^\s.]+\S*)+[^,.\s]+[^$()]+)@';
return preg_replace_callback($reg_exUrl, function($m) use ($trans) {
return '<a href="http' . $m[2]. '://' . strtr($m[3], $trans) . '">' . strtr($m[0], $trans) . '</a>';
}, $text);
}
echo liveLinks('https://nimbusweb.me/s/share/3130667/59rpygxll4mm4ul5so()t');
// => <a href="https://nimbusweb.me/s/share/3130667/59rpygxll4mm4ul5sot">https://nimbusweb.me/s/share/3130667/59rpygxll4mm4ul5sot</a>
$trans = array("(" => "", ")" => "") и strtr($m[3], $trans) удаляет круглые скобки в третьей ($m[3]) группе (подмаске).