我编写了一个regex,它使用regex组模式匹配一个字符串:
^(?<serialCode>[a-zA-Z0-9]{0,3})(?<serialMarket>[a-zA-Z]{0,2})(?<serialSuffix>[a-zA-Z0-9]*)$
它基本上写着:
这意味着:
匹配1
全匹配0-8 abcfobar
集团serialCode 0-3 abc
群serialMarket 3-5 fo
组serialSuffix 5-8吧

上述情况是预期的结果。
当正则表达式如:abc33bar这样的字符串失败时,它会失败,因为第四、第五个字符是数字而不是字母,这是正确的。问题是,应该匹配第二个组的字符移动到下一个匹配组(SerialSuffix),结果是:
匹配1
全匹配0-8 abc33bar
集团serialCode 0-3 abc
组serialMarket 3-3
组serialSuffix 3-8 33

如何防止在非匹配组(包括非匹配组)之后创建非匹配和匹配组?
发布于 2021-01-19 16:46:49
您可以在最后一个可选捕获组中使用lookbehind尝试此正则表达式:
^(?<serialCode>[a-zA-Z0-9]{3})(?:(?<serialMarket>[a-zA-Z]{1,2})(?<serialSuffix>(?<=^.{5})[a-zA-Z0-9]*)?)?RegEx详细信息:
^:开始(?<serialCode>[a-zA-Z0-9]{3}):在serialCode捕获组中匹配和捕获3个字母数字(?::启动非捕获组(?<serialMarket>[a-zA-Z]{1,2}):匹配和捕获serialMarket捕获组中的1或2个字母(?<serialSuffix>(?<=^.{5})[a-zA-Z0-9]*)?:在可选的serialSuffix捕获组中匹配和捕获0或多个字母数字。此组只在使用lookbehind断言(?<=^.{5})捕获前5个字符之后才捕获。)?:结束非捕获组(可选)https://stackoverflow.com/questions/65794415
复制相似问题