gpt4 book ai didi

regex - 用于域匹配的嵌套正则表达式

转载 作者:行者123 更新时间:2023-12-01 23:49:36 35 4
gpt4 key购买 nike

给定域名my.local.domain.com我想提取以下部分:

匹配#1:my.local.domain ...不包括顶级域(com)
比赛#2:local.domain ...不包括顶级域 (com) 和第一部分 (my)
比赛#3:domain ...不包括顶级域(com)和两个主要部分(my.local)

正则表达式不必匹配无限数量的点分隔部分,如果字符串变长,只有尾随的 3 个部分是相关的。
my.local.domain.com :
#1:my.local.domain #2:local.domain #3:domainmy.other.local.domain.com #1:my.other.local.domain #2:local.domain #3:domain
如果它更短,这应该匹配:
domain.com #1:domain #2:domain
到目前为止,这是我的正则表达式:^(.+\.(.+\.(.+)?)?)\.com$ ,问题是只要域中的点分隔部分少于 4 个,它就不再起作用了。我正在努力使内括号成为可选。

对此有任何提示吗?非常感谢!

最佳答案

由于可选性限制,它变得有点复杂,但以下适用于您的示例:

((?:\w+\.)*?(\w*?\.?(\w+)))\.com$

所有运营商技术说明见 http://regex101.com/r/aJ6bZ0/1

逻辑如下:
  • (\w+)\.com$匹配域
  • (\w*\.?(...))可以选择匹配前面的子域
  • (?:\w+\.)*将可选地匹配所有前面的子子域
  • *?而不是 *将迫使运算符(operator)变得懒惰 - 它从不匹配任何字符开始,因此给贪婪的机会 \w+如果没有子域
  • 从第一步开始匹配整个域

    关于regex - 用于域匹配的嵌套正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27208441/

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