PHP Regex在未知字符串之前和之后替换

时间:2017-01-28 00:16:47

标签: php regex string variables

这让我非常疯狂。

如果我有一个像这样的字符串,那么' udp://'之后的值变化:

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:\/\/)(.*)(?=)

在&#39; udp://&#39;之后找到长的字母数字值但是如何使用它来替换&#39; http://&#39;的新值。之前的值和&#39; /tsa.a3m'之后呢?请记住,这些值之间的线上的字符串也随时变化。我读过我必须使用preg_replace,但无法弄清楚如何找到宝贵的字母数字值,坚持下去并丢弃&#39; udp://&#39;将其替换为&#39; http://&#39;并追加&#39; /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 个答案:

答案 0 :(得分:1)

不要使用lookbehind,因为这并没有包含在匹配中,所以它不会被替换。

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

DEMO