如何匹配两个组,其中第 2 组是必需的,第 1 组是可选的
How to match two groups where group 2 is mandatory and group 1 is optional
我的输入是这样的:
tag.service
其中 tag.
是可选的,但 service
是强制性的(尽管可以是任何长度或值,包括单词、数字或 -
)。如果存在标签,它将始终通过 .
从服务中分离出来
更多示例输入:
abc.def
a12.34b
1-2.3-4
123
abc
1-2
我正在尝试将标签和服务提取到两个单独的组,其中标签必须是组 1,服务必须是组 2(即使标签不存在)。
我已经做到了这一点:
^([\d\w]*)\.([\d\w]*)$
但是,以上不允许第 1 组是可选的,也不能确保第 2 组始终可用。
我认为下面的内容可能会让我更接近一些,但仍然相当遥远:
^(?:([\d\w]*)\.)?([\d\w]*)$
所使用的引擎基于 RE2,不幸的是,除了 REGEX 之外没有其他选项,即我无法检查组 post REGEX 以确定哪个组具有哪个值。
非常感谢任何帮助!
我不熟悉 re2,但以下选项仅使用您在问题中使用的正则表达式功能,匹配所有示例并始终将标签(如果存在)放入第一组,将服务放入第二组:
/^(?:([a-z0-9-]+)\.)?([a-z0-9-]+)$/
我的输入是这样的:
tag.service
其中 tag.
是可选的,但 service
是强制性的(尽管可以是任何长度或值,包括单词、数字或 -
)。如果存在标签,它将始终通过 .
更多示例输入:
abc.def
a12.34b
1-2.3-4
123
abc
1-2
我正在尝试将标签和服务提取到两个单独的组,其中标签必须是组 1,服务必须是组 2(即使标签不存在)。
我已经做到了这一点:
^([\d\w]*)\.([\d\w]*)$
但是,以上不允许第 1 组是可选的,也不能确保第 2 组始终可用。
我认为下面的内容可能会让我更接近一些,但仍然相当遥远:
^(?:([\d\w]*)\.)?([\d\w]*)$
所使用的引擎基于 RE2,不幸的是,除了 REGEX 之外没有其他选项,即我无法检查组 post REGEX 以确定哪个组具有哪个值。
非常感谢任何帮助!
我不熟悉 re2,但以下选项仅使用您在问题中使用的正则表达式功能,匹配所有示例并始终将标签(如果存在)放入第一组,将服务放入第二组:
/^(?:([a-z0-9-]+)\.)?([a-z0-9-]+)$/