正则表达式匹配html标记

时间:2012-05-01 11:39:53

标签: html regex tags multiline

我有以下正则表达式:

^(?:(?!<(\w+)(\s+(\w+)\s*\=\s*(\'|")(.*?)\\4\s*)*\s*>).)*$

我有文本框,用户可以在其中键入JavaScript代码,因此正则表达式应匹配以下内容:

if ( i < html > 0 ) || ( j > 10 )

并且它有效,但仅适用于单行,但必须适用于多行

顺便说一句。我在此页面上测试正则表达式:http://www.zytrax.com/tech/web/regex.htm#experiment

3 个答案:

答案 0 :(得分:1)

多行输入失败的原因是默认情况下点(.)与换行符不匹配。您可以通过将(?s)添加到正则表达式的前面以将其置于单线模式(在某些风格中也称为DOTALL模式,因为它使点能够匹配包括换行符的所有内容来修复它)。

其他响应者提到的多线模式可能与您的情况无关。它的作用是允许^$锚点匹配各行的开头和结尾以及整个字符串的开头和结尾。

你说你在ASP.NET RegularExpressionValidator中使用它,这带来了另一个潜在的问题。如果验证器设置为在客户端和服务器上进行验证,那么它将是执行工作的JavaScript正则表达式,而不是.NET。 JavaScript不支持Singleline / DOTALL模式,因此您需要将正则表达式中的点替换为与所有字符匹配的其他内容;大多数人使用[\s\S](任何空格字符或任何空格的字符)。

这是由此产生的正则表达式,包括引用属性值的更强大的习惯用法:

^(?:(?!<\w+(?:\s+\w+\s*\=\s*(['"])(?:(?!\1).)*\1)*\s*>)[\s\S])*$

答案 1 :(得分:0)

如果它是javaScript,你将在你的正则表达式中使用m多线修改器:

你可以测试它在这里工作: http://regexpal.com/

答案 2 :(得分:0)

所有正则表达式引擎都有匹配multi-line的选项。既然你的问题没有提到你正在使用哪种引擎,那么就不容易为你提供进一步的帮助。