我有这个字段由curl_exec返回:
<input name="NUMBER_R" type="hidden" value="1500000">
150000是一个随机数,可能会改变其他的常数
我试过了:
preg_match ('/<input name="NUMBER_R" type="hidden" value="([^"]*)" \/>/', $result, $number)
还有:
preg_match ('/<input name=\'NUMBER_R\' type=\'hidden\' value=\'(\\d+)\'>/ims', $result, $number)
但没有运气......
以下是完整代码:
$result=curl_exec($cid);
curl_close($cid);
$number = array();
if (preg_match ('REGEX', $result, $number))
{
echo $number[1];
}
编辑1: 抱歉,我在echo $ number [1]中忘了[1]; 此外,1500000是随机数,可能会更改
答案 0 :(得分:4)
此正则表达式将按任意顺序查找具有name="number_r"
和type="hidden"
属性的输入标记。然后它会用它的相关值拉出属性value
。它确实需要值文本为所有数字
<input\b\s+(?=[^>]*name=(["'])number_r\1)(?=[^>]*type=(["'])hidden\2)[^>]*value=(["'])(\d+)\3[^>]*>
<input\b\s+
使用左括号和标记名称,确保有分词和空格(?=[^>]*name=(["'])number_r\1)
展望未来,确保此代码包含正确的name
属性(?=[^>]*type=(["'])hidden\2)
展望未来,确保此代码还包含type
属性[^>]*
向前移动光标,直到找到value=
标记(["'])
捕获开放的qoute (\d+)
捕获子字符串并要求它为所有数字\3
匹配正确的近距离报价。这可以省略,因为您已经收到了所需的子字符串。[^>]*>
匹配代码中的其他字符。这可以省略,因为您已经收到了所需的子字符串。组0获取整个输入标记
value
<?php
$sourcestring="<input name="NUMBER_R" type="hidden" value="1500000">";
preg_match('/<input\b\s+(?=[^>]*name=(["\'])number_r\1)(?=[^>]*type=(["\'])hidden\2)[^>]*value=(["\'])(\d+)\3[^>]*>/im',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
$matches Array:
(
[0] => <input name="NUMBER_R" type="hidden" value="1500000">
[1] => "
[2] => "
[3] => "
[4] => 1500000
)
答案 1 :(得分:0)
尝试使用DOM和Xpath来获取它。
$xml = new DomDocument;
$xml->loadXml('<input name="NUMBER_R" type="hidden" value="1500000" />');
$xpath = new DomXpath($xml);
// traverse all results
foreach ($xpath->query('//input[@name="NUMBER_R"]') as $rowNode) {
var_dump($rowNode->getAttribute('value'));
}