当前位置:  开发笔记 > 编程语言 > 正文

正则表达式匹配URL行尾或"/"字符

如何解决《正则表达式匹配URL行尾或"/"字符》经验,为你挑选了4个好方法。

我有一个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

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

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

最后的字符类包含"/"或行尾.尽管如此,角色类似乎对"$"并不满意.如何在仍然撤回正确的组的同时最好地区分这些URL?



1> Peter Bought..:

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

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


把它与你所拥有的更新版本放在一起:

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

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


我如何给你更多的观点;)谢谢你.只是文档(/ |\A)会匹配正斜杠或字符串的开头.
这在JavaScript中不起作用

2> Dave Sherohm..:

你现在有几个正则表达式可以做你想做的事情,所以这已经足够了.

一直没有什么提的是,为什么你的企图将无法正常工作:在字符类,$(以及^,./)没有特殊的意义,所以[/$]比赛无论是文字/或文字$,而不是终止正则表达式(/)或匹配行尾($).


这是经常被遗忘的事情,并且在正则表达式文档中没有提及.
请注意,^在字符类中可以具有特殊含义.如果它是类中的第一个字符,则使其成为负类,除了其他字符外,它将匹配任何内容.例如,为了匹配除a或b之外的任何东西,你可以使用[^ ab].要包含文字^,只需确保它不是第一个,因此要匹配a,b或^,您将使用[ab ^].

3> Adam Tegen..:
/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)(/.*)?$


这是因为对此背后的决策没有任何解释.

4> Sparhawk..:

在Ruby和Bash中,您可以$在括号内使用.

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

(这个解决方案类似于Pete Boughton,但保留了使用$,这意味着行尾,而不是使用\z,这意味着字符串的结尾.)


`$`在javascript中以这种方式工作,而`\ z`则不然(Chrome 48,Firefox 43,IE9).
PHP也是我能说的.我认为没有理由在实际的任何实现中```不能在括号`()`中使用.括号`[]`使它成为文字.
推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有