如何匹配两个组,其中第2组是必填项,第1组是可选项

时间:2019-02-19 13:38:29

标签: regex regex-group re2

我的输入就像: tag.service

其中tag.是可选的,而service是强制性的(尽管可以是任何长度或值,包括单词,数字或-)。如果有标签,它将始终通过.

退出服务

更多示例输入:

abc.def a12.34b 1-2.3-4 123 abc 1-2

我正在尝试将标签和服务提取到两个单独的组中,其中标签必须为组1,服务必须为组2(即使不存在标签)。

我已经设法做到了这一点:

^([\d\w]*)\.([\d\w]*)$

但是,以上不允许第一组是可选的,并且不能确保第二组始终可用。

我认为以下内容可能会使我更接近一点,但距离仍然很远:

^(?:([\d\w]*)\.)?([\d\w]*)$

使用的引擎基于RE2,很遗憾,除了REGEX之外没有其他选择,即我无法检查REGEX之后的组以确定哪个组具有哪个值。

任何帮助,不胜感激!

1 个答案:

答案 0 :(得分:-1)

我对re2不熟悉,但是以下选项仅使用您在问题中使用的正则表达式功能,匹配所有示例,并且始终将标签(如果有)放入第一组,将服务放入第二组:

/^(?:([a-z0-9-]+)\.)?([a-z0-9-]+)$/

此处演示:https://regexr.com/48lnl