我想要一个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