.net 为什么这个正则表达式与特定的文本不匹配?

.net 为什么这个正则表达式与特定的文本不匹配?,.net,regex,.net,Regex,我有一个.NET正则表达式: (<%#)(?<type>((sql)|(magic)|(sqlscalar))):(?<method>([^\s]*)\s*)(\s)*(%>) 它与“sqlscalar”和“magic”完美匹配,但与“sql”不匹配 谢谢你的帮助 这是funcA的@p valu=100得出的服务器名:上面两个函数都在第一行, FuncB和fMagic的结果在第二行 第三行来自sql“select*from dbo.ftelUsers”您的正

我有一个.NET正则表达式:

(<%#)(?<type>((sql)|(magic)|(sqlscalar))):(?<method>([^\s]*)\s*)(\s)*(%>)
它与“sqlscalar”和“magic”完美匹配,但与“sql”不匹配

谢谢你的帮助

这是funcA的@p valu=100得出的服务器名:上面两个函数都在第一行, FuncB和fMagic的结果在第二行
第三行来自sql“select*from dbo.ftelUsers”

您的正则表达式不允许冒号后面有空格,除非它直接位于右括号%>之前。这就是为什么选择*从。。。不匹配

我建议更新一个不同的正则表达式来处理我以前忽略的嵌套标记:

Regex regexObj = new Regex(
    @"<%[#]         # Match '<%#'
    (?<type>        # Match and capture in group 'type':
     sql            # 'sql'
     (?:scalar)?    # optionally followed by 'scalar'
    |               # OR
     magic          # 'magic'
    )               # End of group 'type'
    :               # Match ':'
    (?<method>      # Match and capture in group 'method'
    (?>             # Either match (possessively):
     (?:            # the following group which matches
      (?!<%|%>)     # only if we're not at the start of <% or %>
      .             # any character
     )+             # once or more
    |               # or
     <% (?<Depth>)  # <% (and increase the nesting counter)
    |               # or
     %> (?<-Depth>) # %> (and decrease the nesting counter).
    )*              # Repeat as needed.
    (?(Depth)(?!))  # Assert that the nesting counter is at zero.
    )               # End of group 'method'
    %>              # Then match a closing %>.
    ", 
    RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);

你有没有可能将正则表达式作为文本而不是图像发布?或者除此之外,我同意@TimPietzcker,但是除此之外,你的正则表达式需要一些清理。那些无关的父母怎么了?这是您的原始正则表达式:。这里是,简化的:这里是regex@TonyP:你能提供测试文本而不是图片吗。我真的不想自己打字测试…@Tim,也添加了文本,谢谢..谢谢,什么样的正则表达式才是在结束括号前包含空格的正确方法?谢谢Tim,你的正则表达式的传播真是让人大开眼界,你是救命符这更好,但它不处理嵌套标记,这也是我被卡住的地方。在本例中,他有,但您的正则表达式匹配将在第一个%>处停止,而不是在外面的%>处停止。@BrianStephens:哦,您是对的。我没有看到嵌套标记-好吧,OP应该提供文本来处理,而不是图像:-但这是可以修复的。等等…@TimPietzcker:哇!我从来不知道.NET平衡组。这打开了所有新的正则表达式嵌套的可能性!非常感谢您演示了它们的使用。