如何指定REGEX至少应包含一个可选组?

时间:2018-10-08 12:19:15

标签: regex logic iso8601

我特别考虑使用ISO-8601 durations的正则表达式。该格式指定持续时间必须遵循P[years]Y[months]M[days]DT[hours]H[minutes]M[seconds]SP[weeks]W的形式。 我忽略了P[weeks]W选项。

让我感到困惑的是,所有这些字段都是可选的,但是必须至少存在一个字段。所以此正则表达式

P(?:([\d]{1,4})Y)?(?:(\d+)M)?(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?)?

从技术上讲是不正确的,因为简单的"P"将被视为匹配项。我可以为每个字段定义一个重复模式,除了字段必须以正确的顺序排列。

那么是否有我不知道的正则表达式运算符?

P.S。我知道我的正则表达式也不正确,因为它应该允许负值和小数秒。为了简洁起见,省略了这些额外功能。

0 个答案:

没有答案