正则表达式匹配第一个结束HTMl标记

时间:2009-09-22 05:38:32

标签: html regex

我正在尝试编写与第一个结尾表单标记匹配的正则表达式。

  <form.*name="loginForm".*>[^~]*</form> 

上面的正则表达式匹配到第二个结束,直到第8行。但是我想要一个与下面示例中的标记的直接结尾匹配的正则表达式,它应该匹配第5行。

<html>
<body>
<form method = "post" name="loginForm" >
<input type="text" name="userName"/>
</form>
<form method = "post" name="signupForm" >
<input type="text" name="userName"/>
</form>
</body>
</html>

3 个答案:

答案 0 :(得分:9)

只需使模式非贪婪,以便匹配尽可能少的字符而不是最大可能的字符:

<form[^>]*name="loginForm"[^>]*>[^~]*?</form>

编辑:
在表单标记中将.*更改为[^>]*,以使其与标记外部不匹配。

答案 1 :(得分:3)

使用真实的解析器,例如DOMDocumentSimpleXMLSimpleHTMLDOM。正则表达式不适合解析像HTML这样的非常规语言。

答案 2 :(得分:3)

您不应该使用正则表达式,而是使用DOM解析它:

使用Javascript:

var forms = document.getElementsByTagName('form');
forms[0] // is the first form element.

PHP:

$dom = new DOMDocument();
$dom->loadHTML( $html );
$forms = $dom->getElementsByTagName('form');
$first = $forms->item(0); // reference to first form

您可以使用minidom和ElementTree for Python。