2012-05-01 80 views
0

我有以下的正则表达式:正则表达式匹配HTML标记

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

而且我有文本框,在那里用户可以键入的JavaScript代码,这样的正则表达式应该匹配的东西,如:

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

,它仅适用,但对单但它必须适用于多行

btw。我这个页面上测试正则表达式:http://www.zytrax.com/tech/web/regex.htm#experiment

+0

你在使用运行正则表达式?这是一个命令行工具/脚本还是代码中?一些正则表达式工具在多行上不匹配。 – Rob

+0

在asp中使用:RegularExpressionValidator – aishlin

+0

在上面的情况下,期望的匹配是什么?并且可以在这种情况下提供多行和所需匹配的案例。 – Rob

回答

0

如果它的JavaScript,你会在你的正则表达式m个多修改:

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

0

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

1

它多输入失败的原因是因为点(.)默认不匹配换行符。您可以通过添加(?s)的正则表达式来把它在单线模式的前修复(也称为DOTALL模式在一些味道,因为它授权点匹配一切包括换行符)。

多行模式,这是由其他应答所提到的,可能是不相关的情况。它所做的是允许^$定位符匹配单个行的开始和结尾以及整个字符串的开始和结尾。

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

这里的正则表达式产生的,包括为引号中的属性值,一个更强大的成语:

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