这个隐藏输入的正确模式是什么

时间:2013-06-10 11:54:55

标签: php regex curl

我有这个字段由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是随机数,可能会更改

2 个答案:

答案 0 :(得分:4)

描述

此正则表达式将按任意顺序查找具有name="number_r"type="hidden"属性的输入标记。然后它会用它的相关值拉出属性value。它确实需要值文本为所有数字

<input\b\s+(?=[^>]*name=(["'])number_r\1)(?=[^>]*type=(["'])hidden\2)[^>]*value=(["'])(\d+)\3[^>]*>

enter image description here

  • <input\b\s+使用左括号和标记名称,确保有分词和空格
  • (?=[^>]*name=(["'])number_r\1)展望未来,确保此代码包含正确的name属性
  • (?=[^>]*type=(["'])hidden\2)展望未来,确保此代码还包含type属性
  • [^>]*向前移动光标,直到找到
  • value=标记
  • (["'])捕获开放的qoute
  • (\d+)捕获子字符串并要求它为所有数字
  • \3匹配正确的近距离报价。这可以省略,因为您已经收到了所需的子字符串。
  • [^>]*>匹配代码中的其他字符。这可以省略,因为您已经收到了所需的子字符串。

组0获取整个输入标记

  1. 返回引用的名称的公开引用,以确保捕获正确的关闭引用
  2. 返回引用的类型的开放引用,以确保捕获正确的关闭引用
  3. 返回引用的值的公开引用,以确保捕获正确的关闭引用
  4. 名为value
  5. 的属性中的值

    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
    )
    

答案 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'));
}

testet:http://codepad.viper-7.com/8dwu9f