0

I have following regex:

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

And I have textbox where user can type JavaScript code so regex should match things like:

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

and it works but only for single line but it must work for multiline

btw. I test regex on this page: http://www.zytrax.com/tech/web/regex.htm#experiment

4

3 回答 3

1

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

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

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

这是生成的正则表达式,包括引用属性值的更强大的习语:

^(?:(?!<\w+(?:\s+\w+\s*\=\s*(['"])(?:(?!\1).)*\1)*\s*>)[\s\S])*$
于 2012-05-02T02:47:18.147 回答
0

如果是 javaScript,您将在您的正则表达式中使用 m 多行修饰符:

你可以在这里测试它是否有效: http ://regexpal.com/

于 2012-05-01T11:56:01.073 回答
0

所有正则表达式引擎都有一个匹配multi-line的选项。由于您的问题没有提及您使用的是哪个引擎,因此要进一步帮助您并不容易。

于 2012-05-01T11:57:43.343 回答