这个正则表达式意味着什么:(?![#$])

时间:2012-04-27 06:33:39

标签: asp.net .net regex

有人可以给我一个例子/解释这个正则表达式的作用:

(?![#$])

这是<%(?![#$])(([^%]*)%)*?>的一部分,它是ASP.NET用来解析服务器端代码块的部分。我理解表达式的第二部分,但不是第一部分。

我检查了文档,发现(?! ...)表示零宽度负向前瞻,但我不完全确定我理解这意味着什么。到目前为止我尝试过的任何看起来像<% ... %>的输入似乎都有效 - 我想知道为什么第一个子表达式就在那里。

修改 我想出了这个用于获取ASP.NET表达式的表达式:<%.+?%>然后我找到了Microsoft制作的表达式(上面的完整表达式)。我试图理解为什么当我看起来更简单时他们选择了那个特定的表达方式。 (我试图看看我的表达式是否忽略了MS没有的某些边界条件。)

1 个答案:

答案 0 :(得分:4)

如果下一个字符不是#$,则匹配为negative lookahead assertion,但不会消费它。

负字符类[^#$]非常类似,只是负字符类也会使用该字符,从而阻止它与表达式的其余部分匹配。

要查看差异,请考虑匹配<%test%>

  • 表达式<%(?![#$])(([^%]*)%)*?>捕获test%(rubular)
  • 表达式<%[^#$](([^%]*)%)*?>捕获est%,因为负字符类消耗了t(rubular)