.net 为什么这个正则表达式与特定的文本不匹配?
我有一个.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”您的正
(<%#)(?<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平衡组。这打开了所有新的正则表达式嵌套的可能性!非常感谢您演示了它们的使用。