具有负前瞻的正则表达式路由约束

时间:2012-10-01 08:04:08

标签: regex asp.net-mvc-3

使用http://regexhero.net/tester/

进行测试
^(?!Bar$)
  • Foo匹配
  • Bar不匹配
  • FooBar匹配
  • BarBaz匹配
  • FooBarBaz匹配

设置路由约束时,我必须使用^(?!Bar$).*来获得相同的结果。那是为什么?

1 个答案:

答案 0 :(得分:3)

第一个表达式实际上不会“覆盖”字符串的任何部分。请参阅,^(?!...)子表达式在测试字符串中的特定位置(锚点)匹配(实际上它们都尝试在相同位置匹配 - 在开头 - 并立即失败)。

而这 - ^(?!Bar$).* - 实际上“覆盖”了所有字符串。我想这就是区别。