Справка по PHP Preg_Match - PullRequest
       6

Справка по PHP Preg_Match

0 голосов
/ 04 августа 2011

У меня проблемы с получением URL из списка. Мне нужно вызвать скрипт script.php? Id = 31 и заставить его распечатать правильный итоговый URL 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 голосов
/ 08 августа 2011
$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
0 голосов
/ 04 августа 2011

Я бы разделил ваш строковый литерал, чтобы было проще:

$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'

EDIT

Улучшенная версия, поддерживающая url=http://site.com/page.php?id=31, (без & после идентификатора)

$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

0 голосов
/ 04 августа 2011

Разве /url\=(.*?)&id\=$id&(.*?),/is не должно быть /url\=(.*?)[?&]id\=$id&(.*?),/is? Вы пытаетесь сопоставить что-либо до &id=, хотя в ваших URL есть ?id=.

0 голосов
/ 04 августа 2011

Вы можете сделать это так:

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

Я думаю, что это должно работать.

...