gpt4 book ai didi

regex - 这个正则表达式匹配并且不应该。为什么?

转载 作者:行者123 更新时间:2023-12-04 16:37:31 24 4
gpt4 key购买 nike

这个正则表达式:

^((https?|ftp)\:(\/\/)|(file\:\/{2,3}))?(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(((([a-zA-Z0-9]+)(\.)?)+?)(\.)([a-z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum))([a-zA-Z0-9\?\=\&\%\/]*)?$


为便于阅读而格式化:
^( # Begin regex / begin address clause
(https?|ftp)\:(\/\/)|(file\:\/{2,3}))? # protocol
( # container for two address formats, more to come later
((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) # match IP addresses
)|( # delimiter for address formats
((([a-zA-Z0-9]+)(\.)?)+?) # match domains and any number of subdomains
(\.) #dot for .com
([a-z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum) #TLD clause
) # end address clause
([a-zA-Z0-9\?\=\&\%\/]*)? # querystring support, will pretty this up later
$

匹配:

www.google


不应该。这是我的“失败”测试用例之一。我已经声明在 alpha 而不是 IP 上匹配时,URL 的 TLD 部分是强制性的,并且“google”不适合“[a-z]{2}”子句。

请记住,我将分别解决以下问题 - 这个问题是关于为什么它与 www.google 匹配而不应该匹配。
  • 查询字符串只需要支持正确的格式,目前接受查询字符串字符的任意组合
  • 一些协议(protocol)不受支持,尽管我的要求范围可能不包括它们
  • 不包含 3 个字符的不常见 TLD
  • 可能匹配 http://www.google..com - 将检查连续的点
  • 不支持十进制 IP 地址格式

  • 我的正则表达式有什么问题?

    编辑:另请参阅此正则表达式的早期版本在不同测试用例上的先前问题:
    How can I make this regex match correctly?

    编辑2:固定 - 更正的正则表达式(如要求)是:

    ^((https?|ftp)\:(\/\/)|(file\:\/{2,3}))?(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(((([a-zA-Z0-9]+)(\.)?)+?)(\.)([a-z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum))([\/][\/a-zA-Z0-9\.]*)*?([\/]?[\?][a-zA-Z0-9\=\&\%\/]*)?$

    最佳答案

    “google”可能不适合 [a-z]{2} , 但它确实适合 [a-z]{2}([a-zA-Z0-9\?\=\&\%\/]*)? - 你忘了要求 /如果 URL 超出域,则在 TLD 之后。因此,它将“www.go”解释为域,然后将其解释为“ogle”,中间没有斜线。您可以通过添加 [?/] 来修复它到最后一组的前面,以要求 TLD 和 URL 的任何其他部分之间的这两个符号之一。

    关于regex - 这个正则表达式匹配并且不应该。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1629544/

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