2011-03-02 145 views
0

我有html代码包括元素。 我想要做的是,我需要这个表单元素的整个HTML代码。 例如,在下面PHP。任何人都可以帮助我preg_match?

... 
<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> 
... 

的HTML代码我要提取这些代码:

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

因为我不是那么熟悉的preg_match的表情,我几乎可以计算出来。 我用Google搜索了解自己的表情,但只能掌握一小部分。

任何人都可以帮助我吗? 此致敬礼。

+4

[你不应该使用正则表达式来解析(X)HTML](http://stackoverflow.com/questions/3577641/best-methods-to-parse-html)。被接受的问题的答案应该给你必要的提示。 – 2011-03-02 11:18:38

+1

@Linus:别忘了经典* [你不能用正则表达式解析XHTML](http://stackoverflow.com/questions/1732454)* – grawity 2011-03-02 11:55:44

+0

@grawity是的。我最喜欢的。在取出XHTML-regex-whip时,我在这个和另一个之间交替。 – 2011-03-02 12:05:23

回答

2

定期expession相匹配的形式标记可能是这样的:“(?smi)<form.*?</form>

编辑1:在PHP函数调用看起来就像这样:preg_match('/^.*?<form.*?<\/form>.*$/smi', $data)

编辑2:这可以在这里测试:http://www.spaweditor.com/scripts/regex/index.php

但在一般情况下,我不会建议以及使用正则表达式解析HTMLç颂。

+0

(?smi)部分是做什么的? – timh 2011-03-02 11:23:13

+0

在Perl正则表达式中,它将打开标志以匹配^和$作为行开始和结束(m),匹配新的行字符以及不区分大小写(i) – 2011-03-02 11:40:30

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是每一个形式的字符串数组。

相关问题