3

我有 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 也是一个随机数,可能会改变

4

2 回答 2

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 组获取整个输入标签

  1. 名称的打开引号被反向引用以确保捕获正确的关闭引号
  2. 被反向引用以确保捕获正确的收盘价的类型的开盘价
  3. 被反向引用以确保捕获正确的收盘价的值的开盘价
  4. 命名属性中的值value

PHP 代码示例:

<?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
)
于 2013-06-10T12:27:40.260 回答
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'));
}

测试组: http ://codepad.viper-7.com/8dwu9f

于 2013-06-10T12:01:45.597 回答