Ruby 如何编写正则表达式以将.com或.org与“匹配”-&引用;在域名中
如何在ruby中编写一个正则表达式来查找“-”和“.org”或“com”,如: 但不是:Ruby 如何编写正则表达式以将.com或.org与“匹配”-&引用;在域名中,ruby,regex,Ruby,Regex,如何在ruby中编写一个正则表达式来查找“-”和“.org”或“com”,如: 但不是: some-thing some-thing.moc 我写道:/.-.(org)?|。*(.com)/I 但它无法停止“some thing”或“some thing.moc”:(支持可选连字符 我可以用这个正则表达式: (https?:\/\/)?(www\.)?[a-z0-9-]+\.(com|org)(\.[a-z]{2,3})? (?:https?:\/\/)?(?:www\.)?[a-z0-9]
some-thing
some-thing.moc
我写道:/.-.(org)?|。*(.com)/I
但它无法停止“some thing”或“some thing.moc”:(支持可选连字符
我可以用这个正则表达式:
(https?:\/\/)?(www\.)?[a-z0-9-]+\.(com|org)(\.[a-z]{2,3})?
(?:https?:\/\/)?(?:www\.)?[a-z0-9]+(?:[-][a-z0-9]+)+\.(?:com|org)(?:\.[a-z]{2,3})?
请记住,为了简单起见,我使用了捕获组,但如果您想避免捕获内容,可以使用以下非捕获组:
(?:https?:\/\/)?(?:www\.)?[a-z0-9-]+\.(?:com|org)(?:\.[a-z]{2,3})?
^--- Notice "?:" to use non capturing groups
def is_legit_url?(url)
allowed_master_domains = %w{com org}
allowed_country_domains = %w{sg it uk}
url.match(/[^\/\:]+\.(#{allowed_master_domains.join '|'})(\.#{allowed_country_domains.join '|'})?/i) && true
end
此外,如果您不想使用协议和www模式,可以使用:
[a-z0-9-]+\.(?:com|org)(?:\.[a-z]{2,3})?
支持强制连字符
但是,正如在他的评论中指出的,如果您想确保至少有一个连字符,您可以使用以下正则表达式:
(https?:\/\/)?(www\.)?[a-z0-9-]+\.(com|org)(\.[a-z]{2,3})?
(?:https?:\/\/)?(?:www\.)?[a-z0-9]+(?:[-][a-z0-9]+)+\.(?:com|org)(?:\.[a-z]{2,3})?
尽管如此,这个正则表达式可能会出现可怕的回溯问题
支持可选连字符
我可以用这个正则表达式:
(https?:\/\/)?(www\.)?[a-z0-9-]+\.(com|org)(\.[a-z]{2,3})?
(?:https?:\/\/)?(?:www\.)?[a-z0-9]+(?:[-][a-z0-9]+)+\.(?:com|org)(?:\.[a-z]{2,3})?
请记住,为了简单起见,我使用了捕获组,但如果您想避免捕获内容,可以使用以下非捕获组:
(?:https?:\/\/)?(?:www\.)?[a-z0-9-]+\.(?:com|org)(?:\.[a-z]{2,3})?
^--- Notice "?:" to use non capturing groups
def is_legit_url?(url)
allowed_master_domains = %w{com org}
allowed_country_domains = %w{sg it uk}
url.match(/[^\/\:]+\.(#{allowed_master_domains.join '|'})(\.#{allowed_country_domains.join '|'})?/i) && true
end
此外,如果您不想使用协议和www模式,可以使用:
[a-z0-9-]+\.(?:com|org)(?:\.[a-z]{2,3})?
支持强制连字符
但是,正如在他的评论中指出的,如果您想确保至少有一个连字符,您可以使用以下正则表达式:
(https?:\/\/)?(www\.)?[a-z0-9-]+\.(com|org)(\.[a-z]{2,3})?
(?:https?:\/\/)?(?:www\.)?[a-z0-9]+(?:[-][a-z0-9]+)+\.(?:com|org)(?:\.[a-z]{2,3})?
尽管如此,这个正则表达式可能会出现可怕的回溯问题
当然,根据您的规则是否宽松,可以简化上述内容。以下是一个更简单的模式,但允许s0me-th1ng.com完成
:
/\w-\w+?\.(?:org|com)\b/
当然,根据您的规则是否宽松,可以简化上述内容。以下是一个更简单的模式,但允许s0me-th1ng.com完成
:
/\w-\w+?\.(?:org|com)\b/
您可以使用前瞻:
^(?=[^.]+-[^.]+)([^.]+\.(?:org|com).*)
假设您正在寻找字母的一般模式,其中字母可以是Unicode,您可以执行以下操作:
^(?=\p{L}+-\p{L}+)([^.]+\.(?:org|com).*)
如果要添加数字:
^(?=[\p{L}0-9]+-[\p{L}0-9]+)([^.]+\.(?:org|com).*)
这样您就可以匹配sòme1 thing.com
(Ruby 2.0+for
\p{L}
我想…您可以使用前瞻:
^(?=[^.]+-[^.]+)([^.]+\.(?:org|com).*)
假设您正在寻找字母的一般模式,其中字母可以是Unicode,您可以执行以下操作:
^(?=\p{L}+-\p{L}+)([^.]+\.(?:org|com).*)
如果要添加数字:
^(?=[\p{L}0-9]+-[\p{L}0-9]+)([^.]+\.(?:org|com).*)
这样您就可以匹配sòme1 thing.com
(Ruby 2.0+for\p{L}
我想…这可能会有帮助:
/[a-z0-9]+-?[a-z0-9]+\.(org|com)(\.[a-z]+)?/i
它在中间匹配“--”,也就是说,在没有“--”的情况下仍然匹配名称。
这可能有帮助:
/[a-z0-9]+-?[a-z0-9]+\.(org|com)(\.[a-z]+)?/i
它在中间匹配“--”,也就是说,在没有写“--”的情况下仍然匹配名称。
在编写HTTP服务器…
时,我也遇到了类似的问题。 …我最终使用了以下Regexp: m = url.match /(([a-z0-9A-Z]+):\/\/)?(([^\/\:]+))?(:([0-9]+))?([^\?\#]*)(\?([^\#]*))?/
m[1] # => requested_protocol (optional) - i.e. https, http, ws, ftp etc'
m[4] # => host_name (optional) - i.e. www.my-site.com
m[6] # => port (optional)
m[7] #=> encoded URI - i.e. /index.htm
如果您试图验证主机名,只需确保它不包含少数非法字符(:,/),并且至少包含一个点分隔字符串
如果只想验证.com或.org(+国家代码),可以执行以下操作:
(?:https?:\/\/)?(?:www\.)?[a-z0-9-]+\.(?:com|org)(?:\.[a-z]{2,3})?
^--- Notice "?:" to use non capturing groups
def is_legit_url?(url)
allowed_master_domains = %w{com org}
allowed_country_domains = %w{sg it uk}
url.match(/[^\/\:]+\.(#{allowed_master_domains.join '|'})(\.#{allowed_country_domains.join '|'})?/i) && true
end
*请注意,某些国家使用.co,即英国使用www.amazon.co.UK
出于性能原因,我会将Regexp转换为常量:
module MyURLReview
ALLOWED_MASTER_DOMAINS = %w{com org}
ALLOWED_COUNTRY_DOMAINS = %w{sg it uk}
DOMAINS_REGEXP = /[^\/\:]+\.(#{ALLOWED_MASTER_DOMAINS.join '|'})(\.#{ALLOWED_COUNTRY_DOMAINS.join '|'})?/i
def self.is_legit_url?(url)
url.match(DOMAINS_REGEXP) && true
end
end
祝你好运!我在编写HTTP服务器时遇到了类似的问题 …我最终使用了以下Regexp:
m = url.match /(([a-z0-9A-Z]+):\/\/)?(([^\/\:]+))?(:([0-9]+))?([^\?\#]*)(\?([^\#]*))?/
m[1] # => requested_protocol (optional) - i.e. https, http, ws, ftp etc'
m[4] # => host_name (optional) - i.e. www.my-site.com
m[6] # => port (optional)
m[7] #=> encoded URI - i.e. /index.htm
如果您试图验证主机名,只需确保它不包含少数非法字符(:,/),并且至少包含一个点分隔字符串
如果只想验证.com或.org(+国家代码),可以执行以下操作:
(?:https?:\/\/)?(?:www\.)?[a-z0-9-]+\.(?:com|org)(?:\.[a-z]{2,3})?
^--- Notice "?:" to use non capturing groups
def is_legit_url?(url)
allowed_master_domains = %w{com org}
allowed_country_domains = %w{sg it uk}
url.match(/[^\/\:]+\.(#{allowed_master_domains.join '|'})(\.#{allowed_country_domains.join '|'})?/i) && true
end
*请注意,某些国家使用.co,即英国使用www.amazon.co.UK
出于性能原因,我会将Regexp转换为常量:
module MyURLReview
ALLOWED_MASTER_DOMAINS = %w{com org}
ALLOWED_COUNTRY_DOMAINS = %w{sg it uk}
DOMAINS_REGEXP = /[^\/\:]+\.(#{ALLOWED_MASTER_DOMAINS.join '|'})(\.#{ALLOWED_COUNTRY_DOMAINS.join '|'})?/i
def self.is_legit_url?(url)
url.match(DOMAINS_REGEXP) && true
end
end
祝你好运!这实际上并没有检查域名部分是否包含
-
@GregHewgill你是否至少停留了2秒钟阅读正则表达式??你认为[a-z-]+
有什么作用?不用担心,我知道我肯定误读了我的问题。他没有说任何关于协议的事情。你怎么知道他没有使用FTP或其他各种协议@vol7ron是的,我知道这就是为什么我只是使用http,OP可以很容易地扩展或摆脱协议。我的答案背后的想法是帮助OP不要写一个完美的答案,所以只需要一个简单的正则表达式就可以帮助他们。这实际上并没有检查域名部分是否包含-
@GregHewgill你是否至少停留了2秒钟来阅读正则表达式??你认为[a-z-]+
有什么作用?不用担心,我知道我肯定误读了我在这方面的问题:他没有说任何关于礼节的事。你怎么知道他没有使用FTP或其他各种协议@vol7ron是的,我知道这就是为什么我只是使用http,OP可以很容易地扩展或摆脱协议。我的答案背后的想法是帮助OP不要写一个完美的答案,所以只要一个简单的正则表达式就可以帮助他们了。