2017-01-28 6 views
1

Это сводит меня с ума.PHP Regex Заменить до и после неизвестной строки

Если у меня есть строка, как это, когда значение после того, как «УДП: //» меняется:

LONDON Remote server cluster 88: taken 
udp://8379f690ba57e0fdf8f944324a4453de67780 

BRUSSELS: Hosted MPLS cluster 
udp://5b0e9bc72b989c87a9a70da7865dbb5b4aa9c086 

PARIS: Hosted atrium access 
udp://39415215319c9brt6b9c7d10238c19cc82e7f88b 

PRAGUE: Main Office acces 
udp://e721f751ab0936706192cf15b4632889b38f131a 

Как я могу использовать регулярные выражения в PHP, чтобы сделать его выглядеть так:

LONDON Remote server cluster 88: taken 
http://www.8379f690ba57e0fdf8f944324a4453de67780/tsa.a3m 

BRUSSELS: Hosted MPLS cluster 
http://www.5b0e9bc72b989c87a9a70da7865dbb5b4aa9c086/tsa.a3m 

PARIS: Hosted atrium access 
http://www.39415215319c9brt6b9c7d10238c19cc82e7f88b/tsa.a3m 

PRAGUE: Main Office acces 
http://www.e721f751ab0936706192cf15b4632889b38f131a/tsa.a3m 

до сих пор мне удалось это, чтобы получить это регулярное выражение:

(?<=udp:\/\/)(.*)(?=) 

который находит длинную буквенно-цифровое значение после того, как «УДП: //», но час ow я использую это для замены с новыми значениями «http: //» перед значением и «/tsa.a3m» после него? Готовьте, что строки на линиях между этими значениями изменяются в любое время. Я читал, что мне нужно использовать preg_replace, но не могу понять, как получить это, чтобы найти драгоценное буквенно-цифровое значение, повесить на него и отменить «udp: //» заменить его на «http: //» и добавить «/ tsa.a3m»

Я пытался что-то вроде этого, но это не работает, и это не дает каких-либо конкретных ошибок:

$value = '/(?<=udp:\/\/)(.*)(?=)/'; 
$string[]='http://www'; 
$string[]= $value; 
$string[]='/tsa.a3m'; 
$string = join('',$string); 
$replace = 'udp://'.$variable; 
$data = preg_replace("/($replace, $string, ($_POST['text'])); 

Я буду очень благодарен за любую помощь!

ответ

1

Не используйте lookbehind, потому что это не входит в игру, поэтому оно не заменяется.

$data = preg_replace('#udp://(\S*)#', 'http://www.$1/tsa.a3m', $_POST['text']); 

DEMO

+0

Спасибо большое, он работал исключением того, что /tsa.a3m добавляется в новую строку? – manners

+0

Я не знаю, почему это произойдет. Возможно ли, что у вас есть HTML-разметка типа '
' после URL? Я добавил демонстрацию, показывающую, что она работает нормально с обычной строкой. – Barmar

+0

Barmar, спасибо за демонстрацию, я думаю, проблема связана с тем, как php обрабатывает входной текст из HTML-формы. Я написал подробный вопрос об этом здесь [http://stackoverflow.com/questions/41915684/html-form-post-data-using-php-for-regex-replace-causes-weird-eol-entries-m ] – manners

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