我正在处理一个正则表达式,它需要以下模式带空格和不带空格
- 字母数字值的逗号分隔列表:DG1、D3或R4、UI2
- 字母数字和数字值的逗号分隔列表:D1、2或D1,2
- 字母数字值范围:DG1-DG5或DG1-DG5
- 字母数字和数值范围:DG1-8或DG1-8或8-DG11或8-DG13
- 范围和逗号分隔值的组合:DG1、DG3-DG7或DG1、DG 3-DG6
- 范围和逗号分隔的字母数字和数字值的组合:DG1、3-DG7或1、DG3-6
- 除逗号和连字符外,不允许使用其他特殊字符
- 两个特殊字符不能组合在一起
- 不能以特殊字符开头或结尾
无效值可能是
- ,1,DG1
- -DG1-5
- DG1-3-GP9
- 1、F4
- RE3-
- 1,-G3
- 5,S3,-9
我会使用:
^([A-Z0-9]+(?:-[A-Z0-9]+)?)(?:,(?1))*$
解释:
^ : Start of string
( : begin group 1
[A-Z0-9]+ : 1 or more alphanum
(?: : begin NON capture group
- : literally -
[A-Z0-9]+ : 1 or more alphanum
)? : end group, optional
) : end group 1
(?: : begin NON capture group
, : literally ,
(?1) : repeat regex in group 1
)? : end group,optional
$
如果(?1)
不起作用,则必须复制相关部分:
^[A-Z0-9]+(?:-[A-Z0-9]+)?(?:,[A-Z0-9]+(?:-[A-Z0-9]+)?)*$
如果你想处理可选空间:
^s*[A-Z0-9]+(?:s*-s*[A-Z0-9]+)?(?:s*,s*[A-Z0-9]+(?:s*-s*[A-Z0-9]+)?)*s*$