我对 Java 中的正则表达式有疑问,尽管我认为这也可能适用于其他语言。
我有一个正则表达式来解析用户可能输入类似4d 8h 42m
. 当然,我想让它尽可能灵活,这样用户就不必输入所有数字(15h
例如仅输入一个数字)。
关于这一点,我的正则表达式非常令人满意:(?:([\d]+)d)?[\s]*(?:([\d]+)h)?[\s]*(?:([\d]+)m)?
现在我的问题是它也会匹配一个空字符串,尽管我希望它确保至少一个时间单位被填充。
当前的解决方案是任意选择其中一个为强制性的,但我对此并不满意,因为我试图避免强制性字段。
另外,做一个或不适合我,因为我必须在之后解析正则表达式时测试组,而不是仅仅访问 group(1) 几天, group(2) 几个小时,......(这就是我的想法of 当谈到or时(?:([\d]+)d[\s]*(?:([\d]+)h)?[\s]*(?:([\d]+)m)?|(?:([\d]+)d)?[\s]*([\d]+)h[\s]*(?:([\d]+)m)?|(?:([\d]+)d)?[\s]*(?:([\d]+)h)?[\s]*([\d]+)m)
,被理解为强制天数或强制小时数或强制分钟数)。
那么我如何修改我的正则表达式以确保我现在非捕获组中的至少一个不为空,无论是几天、几小时还是几分钟?