ruby 正则表达式不应捕获协议

发布于 2024-10-22 02:15:21 字数 405 浏览 3 评论 0原文

我正在使用红宝石 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

拿命拼未来 2024-10-29 02:15:21

对于非捕获组使用 (?:http|git)

Use (?:http|git) for a non-capturing group.

梦幻的心爱 2024-10-29 02:15:21

不要对 URI 使用正则表达式。请改用 URI 库。

Don't use a regular expression for URIs. Use the URI library instead.

毁梦 2024-10-29 02:15:21

既然协议看起来只是字母,为什么不将其与[az]匹配呢?

我不太使用正则表达式,但也许这会起作用:

[a-z]*:\/\/(.*).com

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:

[a-z]*:\/\/(.*).com
拥抱影子 2024-10-29 02:15:21

由于 com 之前的 . 的字面意思是 .,因此您应该将其更改为 \.

Since the . before com is meant to be literally ., you should change it to \..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文