【问题标题】:Regexp matching html tag正则表达式匹配 html 标签
【发布时间】:2012-05-01 11:39:52
【问题描述】:

我有以下正则表达式:

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

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

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

它只适用于单行,但它必须适用于多行

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

【问题讨论】:

  • 你用什么来运行正则表达式?这是命令行工具/脚本还是代码中的?一些正则表达式工具不会匹配多行。
  • 在 asp:RegularExpressionValidator 中使用
  • 在上述情况下,所需的匹配是什么?您能否给出一个包含多行的案例以及在这种情况下所需的匹配项。

标签: html regex tags multiline


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-29
        • 1970-01-01
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        相关资源
        最近更新 更多