PHP。任何人都可以用preg_match帮助我吗?

时间:2011-03-02 11:14:44

标签: php regex forms

我有包含元素的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表达不太熟悉,我几乎无法理解。 我用Google搜索了解自己的表达方式,但只能抓住一小部分。

请问有人帮帮我吗? 最好的问候。

3 个答案:

答案 0 :(得分:2)

与表单标记匹配的常规尝试可能如下所示:“(?smi)<form.*?</form>

编辑1 :在PHP中,函数调用如下所示:preg_match('/^.*?<form.*?<\/form>.*$/smi', $data)

编辑2 :可在此处测试:http://www.spaweditor.com/scripts/regex/index.php

但在一般情况下,我也不建议使用正则表达式来解析HTML代码。

答案 1 :(得分:1)

对于像在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是每个表单的字符串数组。

答案 2 :(得分:0)

使用正则表达式处理HTML通常不是一个好主意。我宁愿建议使用HTML解析器。我对这个库有很好的结果:http://simplehtmldom.sourceforge.net/