如何在不匹配的组之后排除匹配的组 - 正则表达式
How to exclude matched group after a non-matched group - regex
我写了一个正则表达式,它使用正则表达式组模式匹配字符串:
^(?<serialCode>[a-zA-Z0-9]{0,3})(?<serialMarket>[a-zA-Z]{0,2})(?<serialSuffix>[a-zA-Z0-9]*)$
基本上它说:
- 第 1 组长度应为 3 个字符且仅包含字母数字字符
- 第二组应为 2 个字符长且仅包含字母
- 最后一组可以是任意长度并包含字母数字字符
这转化为:
匹配 1
完整比赛 0-8 abcfobar
组serialCode
0-3 abc
组serialMarket
3-5 fo
组serialSuffix
5-8巴
以上情况是预期结果
当正则表达式对于像 abc33bar
这样的字符串应该失败时,它会失败,因为第 4 个和第 5 个字符是数字而不是字母,这是正确的。问题是应该匹配第二组的字符移动到下一个匹配组(serialSuffix),结果是:
匹配 1
完全匹配 0-8 abc33bar
组serialCode
0-3 abc
组serialMarket
3-3
组serialSuffix
3-8 33bar
如何防止在非匹配组(包括非匹配组)之后创建非匹配组和匹配组?
您可以在最后一个可选捕获组中尝试使用此正则表达式进行回顾:
^(?<serialCode>[a-zA-Z0-9]{3})(?:(?<serialMarket>[a-zA-Z]{1,2})(?<serialSuffix>(?<=^.{5})[a-zA-Z0-9]*)?)?
正则表达式详细信息:
^
: 开始
(?<serialCode>[a-zA-Z0-9]{3})
: 匹配并捕获 serialCode
捕获组 中的 3 个字母数字
(?:
: 启动非捕获组
(?<serialMarket>[a-zA-Z]{1,2})
:匹配并捕获serialMarket
捕获组 中的1个或2个字母
(?<serialSuffix>(?<=^.{5})[a-zA-Z0-9]*)?
:在optionalserialSuffix
捕获组中匹配并捕获0个或多个字母数字。该组将仅在前 5 个字符后使用后向断言捕获 (?<=^.{5})
)?
:结束非捕获组(可选)
我写了一个正则表达式,它使用正则表达式组模式匹配字符串:
^(?<serialCode>[a-zA-Z0-9]{0,3})(?<serialMarket>[a-zA-Z]{0,2})(?<serialSuffix>[a-zA-Z0-9]*)$
基本上它说:
- 第 1 组长度应为 3 个字符且仅包含字母数字字符
- 第二组应为 2 个字符长且仅包含字母
- 最后一组可以是任意长度并包含字母数字字符
这转化为:
匹配 1
完整比赛 0-8 abcfobar
组serialCode
0-3 abc
组serialMarket
3-5 fo
组serialSuffix
5-8巴
以上情况是预期结果
当正则表达式对于像 abc33bar
这样的字符串应该失败时,它会失败,因为第 4 个和第 5 个字符是数字而不是字母,这是正确的。问题是应该匹配第二组的字符移动到下一个匹配组(serialSuffix),结果是:
匹配 1
完全匹配 0-8 abc33bar
组serialCode
0-3 abc
组serialMarket
3-3
组serialSuffix
3-8 33bar
如何防止在非匹配组(包括非匹配组)之后创建非匹配组和匹配组?
您可以在最后一个可选捕获组中尝试使用此正则表达式进行回顾:
^(?<serialCode>[a-zA-Z0-9]{3})(?:(?<serialMarket>[a-zA-Z]{1,2})(?<serialSuffix>(?<=^.{5})[a-zA-Z0-9]*)?)?
正则表达式详细信息:
^
: 开始(?<serialCode>[a-zA-Z0-9]{3})
: 匹配并捕获serialCode
捕获组 中的 3 个字母数字
(?:
: 启动非捕获组(?<serialMarket>[a-zA-Z]{1,2})
:匹配并捕获serialMarket
捕获组 中的1个或2个字母
(?<serialSuffix>(?<=^.{5})[a-zA-Z0-9]*)?
:在optionalserialSuffix
捕获组中匹配并捕获0个或多个字母数字。该组将仅在前 5 个字符后使用后向断言捕获(?<=^.{5})
)?
:结束非捕获组(可选)