php preg_replace单词最后一部分

时间:2011-11-13 19:39:47

标签: php preg-replace

$str='<p>http://domain.com/1.html?u=1234576</p><p>http://domain.com/2.html?u=2345678</p><p>http://domain.com/3.html?u=3456789</p><p>http://domain.com/4.html?u=56789</p>';
$str = preg_replace('/.html\?(.*?)/','.html',$str);
echo $str;

我需要得到

<p>http://domain.com/1.html</p>
<p>http://domain.com/2.html</p>
<p>http://domain.com/3.html</p>
<p>http://domain.com/4.html</p>

从上一部分的每个单词中删除?u=*number*。感谢。

3 个答案:

答案 0 :(得分:1)

更改此行:

$str = preg_replace('/.html\?(.*?)/','.html',$str);

进入这个:

$str = preg_replace('/.html\?(.*?)</','.html<',$str);

答案 1 :(得分:1)

其他答案的替代方案:

preg_replace("/<p>([^?]*)\?[^<]*<\/p>/", "<p>$1</p>", $input);

这会将所有类型的网址与网址变量匹配,而不仅仅是包含html文件的网址。

例如,您还可以提取以下类型的值:

<p>http://domain.com/1.php?u=1234576</p>
<p>http://domain.com?u=1234576</p>
<p>http://domain.com</p>
<p>http://domain.com/pages/users?uid=123</p>

输出为:

<p>http://domain.com/1.php</p>
<p>http://domain.com</p>
<p>http://domain.com</p>
<p>http://domain.com/pages/users</p>

答案 2 :(得分:0)

此代码会将url加载到一个数组中,以便可以动态处理:

$str = '<p>http://domain.com/1.html?u=1234576</p><p>http://domain.com/2.html?u=2345678</p><p>http://domain.com/3.html?u=3456789</p><p>http://domain.com/4.html?u=56789</p>';
$str = str_replace("<p>","",$str);
$links = preg_split('`\?.*?</p>`', $str,-1,PREG_SPLIT_NO_EMPTY);

foreach($links as $v) {
    echo "<p>".$v."</p>";
}