我正在尝试构建一个与以下逗号分隔值匹配的正则表达式:
Pattern: A,A,A
Where A contains only digits or digits separated by "|"
e.g. A = 111 or A = 111|222
有效字符串可能是
111,222|333,444
or
111|222,333,444
还有我的正则表达式
^[[,]?[[\d]*|[\d]*\|[\d]*]]*$
但是,当我对其进行测试时,它针对以下模式返回了真
111,222|333,
111,222,333|
,111,222,333|444
|111,222|333,444
对于那些以“ |”开头的字符串,我该如何修改我的正则表达式以返回false或“,”并以“ |”结尾或“,”
答案 0 :(得分:2)
您可以使用带有可选组的重复模式来匹配|
和1个或多个数字:
^(?:\d+(?:\|\d+)?,)+\d+(?:\|\d+)?$
那会匹配
^
字符串的开头(?:
非捕获组
\d+
匹配1个以上的数字(?:\|\d+)?,
(可选)匹配|
和1+位数字,后跟,
)+
关闭非捕获组并重复1次以上(或*
重复0次以上)\d+(?:\|\d+)?
匹配1个以上的数字,还可以匹配|
和1个以上的数字$
字符串结尾请注意,您可以省略\d
和逗号周围的括号。
如果可以有多个|
,则可以使用ctwheels建议的模式:
^(?:\d+(?:\|\d+)*,)+\d+(?:\|\d+)*$