2012-12-06 2 views
0

Я пытаюсь соответствовать частям строки в переменные после получения страницы с завиткомрегулярного выражения матч части строка

строки является

value="http://ca.isohunt.com/upload.php?mode=bt&id=880001&sid=3096d80a1c9d2962f8f35a837a3f23e0" 

Я пытаюсь получить &id='' и $sid=''

я попытался использовать это выражение регулярных выражений с помощью preg_match и он не работает

/([^_]*?)&sid-.*?\$ 
+1

Argh, игнорируйте все ответы, которые используют регулярное выражение. , , regex неправильно для этого. Используйте встроенные функции PHP, [parse_url] (http://php.net/manual/en/function.parse-url.php) и [parse_str] (http://php.net/manual/en/function.parse -str.php), как указано в ответе @ m.buettner. – ernie

ответ

0
if ($c=preg_match_all ("/.*?(id=)(\d+).*?(sid=)([a-zA-Z0-9_]{1,})/is", $txt, $matches)) 
    { 
     $id=$matches[2][0]; 
     $sid=$matches[4][0]; 
     print "id = $id <br> sid = $sid\n"; 
    } 

Вот код, который вы можете использовать, чтобы получить 2 значения. Это дает вам значения двух параметров.

+0

Зачем использовать 'preg_match_all', когда код получения имеет hardcoded' 0's? –

+0

true, вы можете использовать preg_match, чтобы получить первое вхождение –

0

Использование parse_url

$url = 'http://username:[email protected]/path?arg=value#anchor'; 
$data = parse_url($url); 
print_r(parse_url($url)); 

Приведенный выше пример выведет:

Array 
(
    [scheme] => http 
    [host] => hostname 
    [user] => username 
    [pass] => password 
    [path] => /path 
    [query] => arg=value 
    [fragment] => anchor 
) 

Тогда:

$queryFields = split('[&]', $data['query']); 
3

Вы не должны использовать регулярные выражения для этого.

Если ваша строка ввода содержит value="" в конце), просто извлеките URL-адрес. Вы могли бы сделать это проще всего с помощью substr:

$url = substr($input, 7, -1); 

Если строка более изменчивы, и все вы знаете, что URL является вещи внутри кавычек, используйте:

preg_match('/".*"/', $input, $match); 
$url = $match[0]; 

Если ваш $input имеет только URL-адрес, вы можете, конечно, пропустить этот шаг полностью. Тогда:

$query = parse_url($url, PHP_URL_QUERY); 
$params = array(); 
parse_str($query, $params); 

echo $params['mode']; // bt 
echo $params['id']; // 880001 
echo $params['sid']; // 3096d80a1c9d2962f8f35a837a3f23e0 
+0

Для полноты вы также можете использовать [parse_str] (http://php.net/manual/en/function.parse-str.php) без второго аргумента, и у вас будут переменные $ mode, $ id и $ sid для вас - обратите внимание, что это может скрыть существующие переменные. – ernie

+0

@ernie yeah, что последний момент, почему я хотел замалчивать эту возможность: D –

0

Во-первых, вы не должны избежать $, если вы не ожидали его в «значение» строки.

Ваше регулярное выражение может быть /&?sid=([^&]+)/ и /&?id=([^&]+)/, при условии, что вы не хотите делать какие-либо проверки на самом URL-адресе. Или в сочетании: /&?id=([^&]+).*&?sid=([^&]+)/.

Помните, что значения будут экспортированы в $matches[1] и $matches[2] когда вы вызываете что-то вроде preg_match('/&?id=([^&]+).*&?sid=([^&]+)/', $value, $matches);

Смежные вопросы