如何匹配组2必须组的两个组,组1是可选的

问题描述 投票:1回答:1

我的意见如下:tag.service

其中tag.是可选的,但service是强制性的(尽管可以是任何长度或值,包括word,digit或-)。如果标签存在,它将始终通过.脱离服务

更多示例输入:

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

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

我成功地做到了这一点:

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

但是,上述内容不允许第一组是可选的,并且不能确保第2组始终是服务。

我认为以下可能会让我更接近但仍然相当遥远:

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

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

任何帮助非常感谢!

regex regex-group re2
1个回答
-1
投票

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

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

在这里演示:https://regexr.com/48lnl

© www.soinside.com 2019 - 2024. All rights reserved.