正则表达式使用" /"来捕获所有网址最后除了" / cms /"

时间:2017-03-17 13:57:10

标签: regex

我想用" /"捕获所有网址最后除了" / cms /"

我目前有这个,但它不对。 我在正则表达式上非常糟糕

(.*[^\/cms\/])\/$

https://regex101.com/r/Bxa6Ma/1

如果我这样做:

(.*[^cms\/])\/$

除了网址有/ blahcms /之外它有效 - 此时它应该再次捕获它,这就是为什么我还要尝试包含" /"一开始也是。

示例网址我想抓住:

  • 示例/ hitherecms /
  • 示例/ bingbangboomcms /

示例网址我不想抓住:

  • 示例/ CMS /
  • 实例/ CMS
  • 实例/ bingbangboom

此正则表达式将在Web.config重写规则中使用。

1 个答案:

答案 0 :(得分:1)

您的方法有问题,因为如果smc或反斜杠在结束反斜杠之前,它与字符串不匹配。使用字符类代替否定前瞻通常是错误的。

一种可能的方法可以用不支持负面外观的语言来解决这个问题(JavaScript就是一个突出的例子):

^(?:(?!\/cms\/$).)*\/$

...或(似乎更高效):

(?:(?!\/cms).{4}|^.{0,3})\/$

Demo

尽管如此,这与消极的外观背后有关:

^.*(?<!\/cms)\/$

Demo。请注意正则表达式的变化。如果您只需要测试而不匹配,则可以跳过^.*部分。