【发布时间】:2014-11-29 23:46:22
【问题描述】:
给定域名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:domain
my.other.local.domain.com
#1:my.other.local.domain
#2:local.domain
#3:domain
如果它更短,则应该匹配:
domain.com
#1:domain
#2:domain
到目前为止,这是我的正则表达式:^(.+\.(.+\.(.+)?)?)\.com$,问题是只要域中的点分隔部分少于 4 个,它就不再起作用了。我正在努力使内括号可选。
对此有任何提示吗?非常感谢!
【问题讨论】:
-
您是否尝试将可选组件的
+替换为*? -
是的。问题也是点(
\.)在两者之间应该是可选的,但是如果我以任何方式重新排列正则表达式,它只会变得更糟。这是我能得到的最接近的值。