限制多个组中的字符总数
Restricting overall number of characters within multiple groups
我正在尝试匹配以下内容:
五个大写字符,后跟可选的小数点(最多十位数字,包括 ,
),后跟自由文本,所有这些最多可以有 40 个字符。
我得到了以下结果:
^([A-Z]{5}(\d*,\d{1,})?.*)$
这有点符合我的模式,但我在限制小数点字符数(最多 10 个)和字符总数(最多 40 个)方面遇到了问题。
我一直在看前瞻,但我做错了,因为它不起作用。
对于我的小数:(?=.{0,10}(\d*,\d{1,}))
试试这个:
(?=.{0,40})^([A-Z]{5}[0-9]{0,10}.{0,35})$
一个选项可能是使用 2 个正前瞻,一个断言字符总数,另一个断言 10 位数字,包括仅在 5 个大写字符之后匹配该数字格式的逗号。
^[A-Z]{5}(?=.{0,35}$)(?:(?=[,\d]{1,10}(?![,\d]))\d+(?:,\d+)?(?![\d,]))?(?!\d).*$
说明
^
字符串开头
[A-Z]{5}
匹配 5 个大写字符 A-Z
(?=.{0,35}$)
断言最多 35 个字符,直到字符串结束
(?:
非捕获组
(?=[,\d]{1,10}(?![,\d]))
正面前瞻,断言直接在右边的是数字或逗号的 1-10 倍,不直接跟数字或逗号
\d+(?:,\d+)?
匹配 1+ 个带可选小数部分的数字
(?![\d,])
否定前瞻,断言直接在右边的不是数字或逗号
)?
关闭组并使其可选
(?!\d)
否定前瞻,断言不是右边的数字
.*
匹配除换行符之外的任何字符 0 次以上
$
字符串结束
我正在尝试匹配以下内容:
五个大写字符,后跟可选的小数点(最多十位数字,包括 ,
),后跟自由文本,所有这些最多可以有 40 个字符。
我得到了以下结果:
^([A-Z]{5}(\d*,\d{1,})?.*)$
这有点符合我的模式,但我在限制小数点字符数(最多 10 个)和字符总数(最多 40 个)方面遇到了问题。
我一直在看前瞻,但我做错了,因为它不起作用。
对于我的小数:(?=.{0,10}(\d*,\d{1,}))
试试这个:
(?=.{0,40})^([A-Z]{5}[0-9]{0,10}.{0,35})$
一个选项可能是使用 2 个正前瞻,一个断言字符总数,另一个断言 10 位数字,包括仅在 5 个大写字符之后匹配该数字格式的逗号。
^[A-Z]{5}(?=.{0,35}$)(?:(?=[,\d]{1,10}(?![,\d]))\d+(?:,\d+)?(?![\d,]))?(?!\d).*$
说明
^
字符串开头[A-Z]{5}
匹配 5 个大写字符 A-Z(?=.{0,35}$)
断言最多 35 个字符,直到字符串结束(?:
非捕获组(?=[,\d]{1,10}(?![,\d]))
正面前瞻,断言直接在右边的是数字或逗号的 1-10 倍,不直接跟数字或逗号\d+(?:,\d+)?
匹配 1+ 个带可选小数部分的数字(?![\d,])
否定前瞻,断言直接在右边的不是数字或逗号
)?
关闭组并使其可选(?!\d)
否定前瞻,断言不是右边的数字.*
匹配除换行符之外的任何字符 0 次以上$
字符串结束