PHP Preg_Match帮助

时间:2011-08-04 12:35:21

标签: php preg-match

我在从列表中获取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&section=1,
url=http://site.com/page.php?id=10&section=8,
url=http://site.com/page.php?id=31&section=2,
url=http://site.com/page.php?id=15&section=3,
url=http://site.com/page.php?id=16&section=7,
url=http://site.com/page.php?id=12&section=5,
";
preg_match("/url\=(.*?)&id\=$id&(.*?),/is", $links, $url);
print_r($url);
?>

4 个答案:

答案 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&section=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&section=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&section=1,
url=http://site.com/page.php?id=10&section=8,
url=http://site.com/page.php?id=31&section=2,
url=http://site.com/page.php?id=31&section=3,
url=http://site.com/page.php?id=16&section=7,
url=http://site.com/page.php?id=12&section=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&section=2
http://site.com/page.php?id=31&section=3

答案 3 :(得分:-1)

你可以这样做:

$links=str_replace(',', '', $links);
$links=explode(array(',', 'url='), $links);
preg_match("/(.*?)&id\=$id&(.*?)/", $links, $url);
print_r($url);

我认为这应该有用。