好吧,正如标题所说,我有一个HTML页面,我使用libcurl(PHP内部的cURL)获取.
该页面有一个<form>,我需要提取<input>名称和值,我想使用Regex.
我正在使用正则表达式,因为我认为这是更简单的方法.如果你认为我不应该使用正则表达式,而是像xpath那样,请说明如何.
我不知道你是否能理解我想说的话,所以随意问.
这是PHP代码(完整):
<?php
/***** DISABLED BY NETWORK TRAFFIC REASONS... USING LOCAL CACHE
$curl = curl_init();
$url = 'https://secure.optimus.pt/Particulares/Kanguru/Login/';
$useragent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; pt-PT; rv:1.9.1) Gecko/20090624 Firefox/3.5';
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_USERAGENT,$useragent);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,true);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
curl_setopt($curl,CURLOPT_CAINFO,getcwd()."\optimus_secure.crt");
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$contents = curl_exec($curl);
*/
$contents = file_get_contents('local_secure.html');
preg_match('%<form name="aspnetForm" .*? action="(.*?)" .*?>(.*?)</form>%s',$contents,$matches);
//echo '<pre>'.htmlentities($contents).'</pre>';
//array_shift($matches);
echo '<pre>---------';
foreach($matches as $match)
echo '$match:::::: '.htmlentities($match)."\r\n\r\n";
echo '</pre>';
echo '<pre>__________';
preg_match_all('/<input type=".*?" name="(.*?)" value="(.*?)" \/>/', $matches[0], $matches2);
print_r($matches2);
echo '</pre>';
?>
Run Code Online (Sandbox Code Playgroud)
当然,<pre>标签和所有输出仅用于调试.
另外,这是HTML页面的源代码(重要的部分):
<form …Run Code Online (Sandbox Code Playgroud)