如何通过preg_replace更改网址的一部分?

时间:2016-01-19 17:35:53

标签: php string preg-replace

我正在尝试使用php preg_replace更改html的所有链接。所有的uris都有以下形式

W/System.err: java.net.ConnectException: failed to connect to sgsbirds.com/182.50.149.129 (port 80): connect failed: ECONNREFUSED (Connection refused)
W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:114)
W/System.err:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
W/System.err:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
W/System.err:     at java.net.Socket.connect(Socket.java:833)
W/System.err:     at com.android.okhttp.internal.Platform.connectSocket(Platform.java:152)
W/System.err:     at com.android.okhttp.Connection.connect(Connection.java:101)
W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294)
W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179)
W/System.err:     at org.dycusa.sgs.wallpapers.IntentServiceManager.onHandleIntent(IntentServiceManager.java:111)
W/System.err:     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err:     at android.os.Looper.loop(Looper.java:136)
W/System.err:     at android.os.HandlerThread.run(HandlerThread.java:61)
W/System.err: Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
W/System.err:     at libcore.io.Posix.connect(Native Method)
W/System.err:     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
W/System.err:     at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:112)
W/System.err:   ... 16 more

我想将其更改为:

test.com/item/16

我尝试了以下操作,但没有返回任何更改:

test.com/z/item/16

4 个答案:

答案 0 :(得分:2)

你必须使用@nickb指出的分隔符​​, /your_regular_expression//是正则表达式的标准分隔符,因此,它是一个特殊字符,您必须使用反斜杠/来转义要匹配的\/

preg_replace("/\/item/","z/item",$links);

但幸运的是,您可以选择自己的分隔符,例如#,因此无需转义/

preg_replace("#/item#","z/item",$links);

答案 1 :(得分:1)

这样做:

<?php
$links = 'http://test.com/item/16';
$a = preg_replace("/item/","z/item",$links);

echo $a;

preg_replace不会更改输入字符串,而是返回一个修改后的字符串....它存储在$ a变量中..

答案 2 :(得分:0)

您需要分隔符并将preg_replace设置为变量

$links = 'http://test.com/item/16';
$links = preg_replace('/\/item/','/z/item',$links);

echo $links; 

但是,为什么不在这种情况下只使用str_replace?

答案 3 :(得分:0)

提供的答案存在的问题是,如果您在网址中有多个/ item实例,则会替换所有这些实例,例如以下网址:

http://items.domain.com/item/16

会搞砸,尝试修改路径:

$path = parse_url( $url, PHP_URL_PATH );
$url  = str_replace( $path, '/z'.$path, $url );