PHP.Может ли кто-нибудь помочь мне с preg_match? - PullRequest
0 голосов
/ 02 марта 2011

У меня есть HTML-код, включая элементы. То, что я пытаюсь сделать, мне нужен весь HTML-код этого элемента формы. Например, в HTML-код ниже

...
<p>Sample</p>
<img src="..." />
<form method="post" >
    <input type="hidden" value="v1" id="v1" name="task">
    <input type="hidden" value="v2" name="v2">
    ...
</form>
<div>...</div>
...

Я хочу извлечь эти коды:

<form method="post" >
    <input type="hidden" value="v1" id="v1" name="task">
    <input type="hidden" value="v2" name="v2">
    ...
</form>

Так как я не очень знаком с выражением preg_match, я вряд ли смогу это понять. Я гуглил, чтобы понять выражения сам, но только мог получить небольшую часть понимания.

Кто-нибудь может мне помочь, пожалуйста? С наилучшими пожеланиями.

Ответы [ 3 ]

2 голосов
/ 02 марта 2011

Обычное выражение, соответствующее тегу формы, может выглядеть следующим образом: "(?smi)<form.*?</form>"

EDIT 1 : В PHP вызов функции будет выглядеть следующим образом: preg_match('/^.*?<form.*?<\/form>.*$/smi', $data)

РЕДАКТИРОВАТЬ 2 : Это можно проверить здесь: http://www.spaweditor.com/scripts/regex/index.php

Но в общем случае я бы не советовал также использовать регулярные выражения для анализа HTML-кода.

1 голос
/ 02 марта 2011

Для чего-то такого же простого, как сопоставление тега формы в html, просто не используйте регулярные выражения или парсеры xhtml сторонних производителей.

Вместо этого используйте стандартный DOM Parser .

Это так же просто, как:

// Create a new DOM Document to hold our webpage structure 
$xml = new DOMDocument(); 

// Load the html's contents into DOM 
$xml->loadHTML($html); 

$forms = array(); 

//Loop through each <form> tag in the dom and add it to the $forms array 
foreach($xml->getElementsByTagName('form') as $form) { 
    //Get the node's html string
    $forms[] = $form->ownerDocument->saveXML($form); 
}

, где $forms - массив строк всех форм.

0 голосов
/ 02 марта 2011

Использование регулярных выражений для работы с HTML, как правило, не очень хорошая идея. Я бы предпочел использовать парсер HTML. У меня были хорошие результаты с этой библиотекой: http://simplehtmldom.sourceforge.net/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...