使用http://regexhero.net/tester/
进行测试^(?!Bar$)
Foo
匹配Bar
不匹配FooBar
匹配BarBaz
匹配FooBarBaz
匹配设置路由约束时,我必须使用^(?!Bar$).*
来获得相同的结果。那是为什么?
答案 0 :(得分:3)
第一个表达式实际上不会“覆盖”字符串的任何部分。请参阅,^
和(?!...)
子表达式在测试字符串中的特定位置(锚点)匹配(实际上它们都尝试在相同位置匹配 - 在开头 - 并立即失败)。
而这 - ^(?!Bar$).*
- 实际上“覆盖”了所有字符串。我想这就是区别。