我有一个URL,我正在尝试将它与正则表达式匹配以拉出一些组.我遇到的问题是URL可以结束或继续使用"/"和更多URL文本.我想匹配这样的网址:
但不匹配这样的东西:
所以,我认为我最好的选择是这样的:
/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)[/$]
Run Code Online (Sandbox Code Playgroud)
最后的字符类包含"/"或行尾.尽管如此,角色类似乎对"$"并不满意.如何在仍然撤回正确的组的同时最好地区分这些URL?
Pet*_*ton 110
要匹配内容的任何一个/或结尾,请使用 (/|\z)
这仅适用于您不使用多行匹配的情况(即您匹配单个URL,而不是换行符分隔的URL列表).
把它与你所拥有的更新版本放在一起:
/(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|\z)
Run Code Online (Sandbox Code Playgroud)
请注意,我已经将开头更改为非空格(\S+?)的非贪婪匹配,而不是匹配任何内容和所有内容(.*)
Dav*_*man 57
你现在有几个正则表达式可以做你想做的事情,所以这已经足够了.
一直没有什么提的是,为什么你的企图将无法正常工作:在字符类,$(以及^,.和/)没有特殊的意义,所以[/$]比赛无论是文字/或文字$,而不是终止正则表达式(/)或匹配行尾($).
Ada*_*gen 36
/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)(/.*)?$
Run Code Online (Sandbox Code Playgroud)
Spa*_*awk 17
在Ruby和Bash中,您可以$在括号内使用.
/(\S+?)/(\d{4}-\d{2}-\d{2})-(\d+)(/|$)
Run Code Online (Sandbox Code Playgroud)
(这个解决方案类似于Pete Boughton,但保留了使用$,这意味着行尾,而不是使用\z,这意味着字符串的结尾.)