我试图在从curl获取页面后将字符串的一部分匹配到变量中
字符串是
value="http://ca.isohunt.com/upload.php?mode=bt&id=880001&sid=3096d80a1c9d2962f8f35a837a3f23e0"
我想获得&id=''
和$sid=''
我尝试使用preg_match使用这个正则表达式并且它不起作用
/([^_]*?)&sid-.*?\$
答案 0 :(得分:3)
你不应该使用正则表达式。
如果您的输入字符串包含value="
(以及最后的"
),则只需提取网址即可。您可以使用substr
:
$url = substr($input, 7, -1);
如果字符串变量更大,并且您只知道URL是引号内的内容,请使用:
preg_match('/".*"/', $input, $match);
$url = $match[0];
如果您的$input
只有网址,您当然可以完全跳过此步骤。然后:
$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
答案 1 :(得分: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']);
答案 2 :(得分:0)
首先,你不应该逃避$
,除非你期望它在“值”字符串中。
您的正则表达式可能是/&?sid=([^&]+)/
和/&?id=([^&]+)/
,前提是您不想对网址本身进行任何检查。或者合并:/&?id=([^&]+).*&?sid=([^&]+)/
。
请记住,当您拨打$matches[1]
$matches[2]
和preg_match('/&?id=([^&]+).*&?sid=([^&]+)/', $value, $matches);
答案 3 :(得分: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个参数的值。