curl からページを取得した後、文字列の一部を変数に一致させようとしています
文字列は
value="http://ca.isohunt.com/upload.php?mode=bt&id=880001&sid=3096d80a1c9d2962f8f35a837a3f23e0"
私は取得しようとしてい&id=''
ます$sid=''
preg_matchを使用してこの正規表現を使用しようとしましたが、機能しませんでした
/([^_]*?)&sid-.*?\$
これには正規表現を使用しないでください。
入力文字列に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
$
まず、「value」文字列で予期しない限り、をエスケープしないでください。
URL自体をチェックしたくない場合は、正規表現を/&?sid=([^&]+)/
とにすることができます。/&?id=([^&]+)/
または組み合わせて:/&?id=([^&]+).*&?sid=([^&]+)/
。
値はにエクスポートされ、次のようなものを呼び出すときに覚えておいて$matches[1]
ください$matches[2]
。preg_match('/&?id=([^&]+).*&?sid=([^&]+)/', $value, $matches);
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つの値を取得するために使用できるコードは次のとおりです。これにより、2つのパラメーターの値が取得されます。
使用するparse_url
$url = 'http://username:password@hostname/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']);