我想要一個HTML字符串,並且對於以「_page.php」結尾的字符串中的所有URL進行轉換,以便它們只包含基本名稱和「_page 「因此,例如,以該字符串:使用preg_replace轉換字符串中的URL
<br/>http://www.website.com/folder/A_page.php TEXT
<br/>http://www.website.com/folder/B_page.php TEXT
<br/>http://www.website.com/folder/C_page.php TEXT
<br/>http://www.website.com/folder/D_dont.php TEXT
我希望它看起來像:
<br/>A_page TEXT
<br/>B_page TEXT
<br/>C_page TEXT
<br/>http://www.website.com/folder/D_dont.php TEXT
我寫了這個:
$str = preg_replace('!(http)(s)?:\/\/[a-zA-Z0-9.?&_/]+_page.php!', '$0',$str);
它可以獲得正確數量的匹配,但它將用$ 0替換它們,這是整個匹配的URL,因此根本不會更改URL。這樣做:
$str = preg_replace('!(http)(s)?:\/\/[a-zA-Z0-9.?&_/]+_page.php!', '$1',$str);
獲取我:
http TEXT
http TEXT
http TEXT
http://www.website.com/folder/D_dont.php TEXT
所以我想,如果我換了$ 1 $二將返回URL的身體,我可以解析和返回是這樣的:
$str = preg_replace('!(http)(s)?:\/\/[a-zA-Z0-9.?&_/]+_page.php!', basename('$2','.php'),$str);
$ 2變成空了。我如何捕獲preg_replace中鏈接的主體?
'$ 2'或者是's'或空的,因爲它是什麼'(S)''captures.Use !https?:// [a-zA-Z0-9.?&_/] * /([^ /] * _page)\ .php!'並替換爲$ 1。 –
要使用'basename('$ 2','。php')'或任何函數作爲替換,您需要'preg_replace_callback()'。 – AbraCadaver