gpt4 book ai didi

ruby - 简单的网址清理

转载 作者:数据小太阳 更新时间:2023-10-29 07:28:53 25 4
gpt4 key购买 nike

我正在尝试进行一些基本的 url 清理,以便

www.google.com
www.google.com/
http://google.com
http://google.com/
https://google.com
https://google.com/

http://www.google.com取代(或 https://www.google.com,以防 https:// 位于开头)。

基本上我想检查是否有 http/https在开头和/在一个正则表达式的末尾。

我正在尝试这样的事情:

"https://google.com".match(/^(http:\/\/|https:\/\/)(.*)(\/)*$/)在这种情况下,我得到: => #<MatchData "https://google.com" 1:"https://" 2:"google.com" 3:nil>这很好。

不幸的是:

"https://google.com/".match(/^(http:\/\/|https:\/\/)(.*)(\/)*$/)我得到: => #<MatchData "https://google.com/" 1:"https://" 2:"google.com/" 3:nil>并且想要 2:"google.com" 3:"/"

知道怎么做吗?

最佳答案

如果你发现错误就很明显了;)

你正在尝试:

^(http:\/\/|https:\/\/)(.*)(\/)*$

答案是使用:

^(http:\/\/|https:\/\/)(.*?)(\/)*$

这使得运算符“非贪婪”,因此尾部正斜杠不会被“.”吞没。运营商。

编辑:

事实上,你真的应该使用:

^(http:\/\/|https:\/\/)?(www\.)?(.*?)(\/)*$

这样,您还将匹配前两个示例,它们中没有“http(s)://”。您还拆分了“www”部分的值(value)/存在。在行动中:http://www.rubular.com/r/VUoIUqCzzX

编辑2:

我很无聊,想完善这个:P

给你:

^(https?:\/\/)?(?:www\.)?(.*?)\/?$

现在,您需要做的就是用第一个匹配项(或“http://”,如果没有)替换您的网站,然后是“www.”,然后是第二个匹配项。

在行动中:http://www.rubular.com/r/YLeO5cXcck

(18 个月后)编辑:

查看我很棒的 ruby​​ gem,它将帮助您解决问题!

https://github.com/tom-lord/regexp-examples

/(https?:\/\/)?(?:www\.)?google\.com\/?/.examples # => 
["google.com",
"google.com/",
"www.google.com",
"www.google.com/",
"http://google.com",
"http://google.com/",
"http://www.google.com",
"http://www.google.com/",
"https://google.com",
"https://google.com/",
"https://www.google.com",
"https://www.google.com/"]

/(https?:\/\/)?(?:www\.)?google\.com\/?/.examples.map(&:subgroups) # =>
[[],
[],
[],
[],
["http://"],
["http://"],
["http://"],
["http://"],
["https://"],
["https://"],
["https://"],
["https://"]]

关于ruby - 简单的网址清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17338217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com