正则expression式匹配URL结尾或“/”字符

我有一个URL ,我试图将它匹配到正则expression式来拉出一些组。 我遇到的问题是URL可以结束继续使用“/”和更多的URL文本。 我想匹配这样的url:

  • HTTP://服务器/ XYZ / 2008-10-08-4
  • HTTP://服务器/ XYZ / 2008-10-08-4 /
  • HTTP://服务器/ XYZ / 2008-10-08-4 / 123 /更

但不符合这样的东西:

  • HTTP://服务器/ XYZ / 2008-10-08-4-1

所以,我认为我最好的select是这样的:

/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)[/$] 

最后的字符类包含“/”或行尾。 尽pipe如此,angular色类似乎并不满意于“$”。 我怎样才能最好地区分这些url,同时仍然拉回正确的组?

 /(.+)/(\d{4}-\d{2}-\d{2})-(\d+)(/.*)?$ 

要匹配内容的任何一个/或结尾,请使用(/|\z)

这仅适用于不使用多行匹配的情况(即,您匹配的是单个url,而不是以换行符分隔的url列表)。

把它与你有什么更新版本:

 /(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|\z) 

请注意,我已经将开始更改为非空格( \S+? )的非贪婪匹配,而不是匹配任何内容和所有内容( .*

你现在有几个正则expression式可以做你想做的事情,所以已经被充分的覆盖了。 没有提到的是为什么你的尝试不行:在一个字符类里, $ (以及^,。/ )没有特殊含义,所以[/ $]匹配一个文字/或者一个文字$而不是终止正则expression式(/)或匹配行尾($)。

在Ruby和Bash中,你可以在$内使用括号。

 /(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|$) 

(这个解决scheme类似于Pete Boughton's,但保留了$的用法,这意味着行结束,而不是使用\z ,这意味着string的结尾。