2013-06-10 1 views
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]; 
    } 

EDIT 1: К сожалению я забыл [1] в эхо $ количество [1]; Также 1500000 является случайным числом и может изменить

+0

возможно дубликат [? Синтаксический и обработка HTML/XML] (http://stackoverflow.com/questions/3577641/ parsing-and-processing-html-xml) – Quentin

+3

С первой попытки вы заставляете самозакрывающийся тег, тогда как возвращаемое значение фактически не самозакрывается. Кроме того, элементы REGEX's обычно не являются отличным шагом. Почему бы не бросить его в DOMDocument и не узнать ценность этого? – Utkanos

+0

'$ number' - это массив, вы должны использовать' print_r' вместо 'echo'. – HamZa

ответ

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) смотреть вперед, чтобы гарантировать, что t его тег также включает 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 
) 
+1

Вау, кто ты, чувак, это лучший ответ, который я когда-либо получал от stackoverflow , большое спасибо – Vladimir

+0

:) рад, что смогу помочь –

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

+1

Большое вам спасибо, но, к сожалению, я не могу использовать DOM для этого, мне просто нужен шаблон для скрытого поля со значением случайного числа – Vladimir

Смежные вопросы