正则匹配CRON表达式如何为7个分段分别生成独立捕获组
问题原因
你当前的正则将捕获组写在了重复量词{7}内部,绝大多数正则引擎的默认规则是:被量词修饰的捕获组,只会保留最后一次匹配到的内容,因此你只能拿到第7个分段的捕获结果,前面6次的匹配内容都会被覆盖。
解决方案
因为你要匹配的CRON分段数固定为7段,直接显式声明7个独立捕获组即可,整个字符串的匹配结果会默认作为第0组返回,7个分段会分别对应第1到第7个捕获组:
^([0-9*\/]+)\s([0-9*\/]+)\s([0-9*\/]+)\s([0-9*\/]+)\s([0-9*\/]+)\s([0-9*\/]+)\s([0-9*\/]+)$
效果验证
针对你给出的测试串1/6 * * * 0 */2 *,匹配结果如下:
- 第0组(完整匹配):
1/6 * * * 0 */2 * - 第1组:
1/6 - 第2组:
* - 第3组:
* - 第4组:
* - 第5组:
0 - 第6组:
*/2 - 第7组:
*
可选优化
如果你使用的正则引擎支持命名捕获组(Python、Java、JavaScript、Go等主流语言均支持),可以给每个分段加上语义化的组名,后续取值更方便:
^(?<second>[0-9*\/]+)\s(?<minute>[0-9*\/]+)\s(?<hour>[0-9*\/]+)\s(?<dayOfMonth>[0-9*\/]+)\s(?<month>[0-9*\/]+)\s(?<dayOfWeek>[0-9*\/]+)\s(?<year>[0-9*\/]+)$
内容的提问来源于stack exchange,提问作者JTinkers
相关产品推荐
相关产品推荐

