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];

如果您$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
于 2012-12-06T23:57:29.977 回答
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 回答
0

$首先,除非您期望它出现在“值”字符串中,否则您不应该逃避它。

您的正则表达式可以是/&?sid=([^&]+)/and /&?id=([^&]+)/,前提是您不想对 url 本身进行任何检查。或结合:/&?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 回答