0

curl からページを取得した後、文字列の一部を変数に一致させようとしています

文字列は

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

私は取得しようとしてい&id=''ます$sid=''

preg_matchを使用してこの正規表現を使用しようとしましたが、機能しませんでした

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

4 に答える 4

3

これには正規表現を使用しないでください。

入力文字列にvalue="(および"最後に)が含まれている場合は、URLを抽出するだけです。あなたはおそらくこれを使用して最も簡単に行うことができますsubstr

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

文字列がより可変であり、URLが引用符内のものであることがわかっている場合は、次を使用します。

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

$inputURLしかない場合は、もちろんこの手順を完全にスキップできます。それで:

$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
于 2012-12-06T23:57:29.977 に答える
0

$まず、「value」文字列で予期しない限り、をエスケープしないでください。

URL自体をチェックしたくない場合は、正規表現を/&?sid=([^&]+)/とにすることができます。/&?id=([^&]+)/または組み合わせて:/&?id=([^&]+).*&?sid=([^&]+)/

値はにエクスポートされ、次のようなものを呼び出すときに覚えておいて$matches[1]ください$matches[2]preg_match('/&?id=([^&]+).*&?sid=([^&]+)/', $value, $matches);

于 2012-12-07T00:15:49.923 に答える
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つの値を取得するために使用できるコードは次のとおりです。これにより、2つのパラメーターの値が取得されます。

于 2012-12-07T00:16:35.463 に答える
0

使用する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']);
于 2012-12-06T23:56:26.900 に答える