ruby 正则表达式不应捕获协议
我正在使用红宝石 1.8.7。
我有以下文本,
http://example.com
我写了这个正则表达式,
http:\/\/(.*).com
这有效。
现在我得到了以下文本
git://example.com
为了使其工作,我将我的正则表达式更改为
(http|git):\/\/(.*).com
上述代码有效,但我没有使用 'http' 或 'git' 。看来我要求正则表达式捕获一些我不会使用的东西。
这个正则表达式是否有一个更礼貌的版本,其中正则表达式不会捕获协议?
I am using ruby 1.8.7.
I have following text
http://example.com
I wrote this regex
http:\/\/(.*).com
This works.
Now I got following text
git://example.com
In order to make it work I chaged my regex to
(http|git):\/\/(.*).com
Above code works but I have no use for 'http' or 'git' . It seems I am asking regex to capture something that I am not going to use.
Is there a politer version of this regex where regex will not be capturing protocol?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
对于非捕获组使用
(?:http|git)
。Use
(?:http|git)
for a non-capturing group.不要对 URI 使用正则表达式。请改用 URI 库。
Don't use a regular expression for URIs. Use the URI library instead.
既然协议看起来只是字母,为什么不将其与
[az]
匹配呢?我不太使用正则表达式,但也许这会起作用:
Since the protocol seems to be only letters, why not match it with
[a-z]
?I don't use regex that much, but maybe this will work:
由于
com
之前的.
的字面意思是.
,因此您应该将其更改为\.
。Since the
.
beforecom
is meant to be literally.
, you should change it to\.
.