我在从列表中获取URL时遇到问题。我需要调用脚本script.php?id = 31 并打印出正确的结果网址http://site.com/page.php?id= 31 & section = 2没有( url=
和,
)。
我在示例中使用了print_r
,因为$url[0]
和$url[1]
没有结果。
由于
<?php
$id=$_REQUEST["id"];
$links="
url=http://site.com/page.php?id=22§ion=1,
url=http://site.com/page.php?id=10§ion=8,
url=http://site.com/page.php?id=31§ion=2,
url=http://site.com/page.php?id=15§ion=3,
url=http://site.com/page.php?id=16§ion=7,
url=http://site.com/page.php?id=12§ion=5,
";
preg_match("/url\=(.*?)&id\=$id&(.*?),/is", $links, $url);
print_r($url);
?>
答案 0 :(得分:0)
我会拆分你的字符串文字以使其更容易:
$id = 31;
preg_match('/url=((?:.*?)[?&]id=' . $id . '&.*),/im', $subject, $regs);
echo $regs[1]; // this will be 'http://site.com/page.php?id=$31§ion=3'
支持url=http://site.com/page.php?id=31,
的改进版本(在ID之后没有&
)
$id = 1;
preg_match('/url=((?:.*?)[?&]id=' . $id . '[^0-9](?<![0-9]).*),/im', $subject, $regs)
echo $regs[1]; // this will be 'http://site.com/page.php?id=$31§ion=3'
哇,我的意思是放$regs[1]
,而不是$subject[1]
,这是愚蠢的:-P
答案 1 :(得分:0)
/url\=(.*?)&id\=$id&(.*?),/is
/url\=(.*?)[?&]id\=$id&(.*?),/is
不应该&id=
?尽管您的网址中有?id=
,但您仍尝试匹配某些内容,直到{{1}}。
答案 2 :(得分:0)
$id = $_REQUEST["id"];
$links="
url=http://site.com/page.php?id=22§ion=1,
url=http://site.com/page.php?id=10§ion=8,
url=http://site.com/page.php?id=31§ion=2,
url=http://site.com/page.php?id=31§ion=3,
url=http://site.com/page.php?id=16§ion=7,
url=http://site.com/page.php?id=12§ion=5,
";
preg_match_all('/(url=.*?id='.$id.'&.*?),/im', $links, $result, PREG_PATTERN_ORDER);
for($i = 0; $i < count($result[0]); $i++)
{
$link = preg_replace('/(url=|,)/im', '', $result[1][$i]);
echo $link;
}
假设$ id为31,将输出:
http://site.com/page.php?id=31§ion=2
http://site.com/page.php?id=31§ion=3
答案 3 :(得分:-1)
你可以这样做:
$links=str_replace(',', '', $links);
$links=explode(array(',', 'url='), $links);
preg_match("/(.*?)&id\=$id&(.*?)/", $links, $url);
print_r($url);
我认为这应该有用。