正则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的结尾。