我正在使用在<tr/>
标记内包装<form/>
标记的不幸做法,以便能够将单行内容作为表单发布到服务器。 HTML是通过XSL生成的,有时在<xsl:if/>
和<xsl:choose/>
之间有XSL流控制(<xsl:attribute/>
,<form/>
等)或<tr/>
标记标签
示例:
<table>
<tbody>
<form id="row1_form">
<xsl:if test="test">
<xsl:attribute name="foo">bar</xsl:attribute>
</xsl:if>
<tr id="row1">
...
我正在尝试编写一个正则表达式,它会在“<tr
”字符串后的某个位置找到“<form
”字符串出现的所有位置。以下内容适用于此:
<form[^<]*?>[\s\w\<\:\>\/]*<tr
我真正需要的是,只有在“<table
”和“<form
”字符串之间不出现字符串“<tr
”时才能匹配上述正则表达式。如果“<table
”与“<form
”之间未出现字符串“<tr
”,则表示我发现表单标记无效。
谢谢, 马特
答案 0 :(得分:1)
此正则表达式会找到一个包含<tr
且前面没有<table
的表单:
<form[^<]*(?:<(?!/?form|tr|table)[^<]*)*<tr\b
确实需要工具支持负向前瞻。请注意,此正则表达式实现了Jeffrey Friedl的展开循环效率技术并且非常快。
答案 1 :(得分:0)
如果您的正则表达式引擎支持负面外观,您可以执行以下操作:
<form[^<]*?>((?!<table)[\s\w\<\:\>\/])*<tr