正则表达式
Regular expression
我正在尝试创建以 abc 开头的正则表达式,然后是 space,然后是不应以 0 开头且应小于 33 的 2 位数字,然后在括号中至少应有 3数字之间用逗号分隔并 space。在那之后如果逗号然后 abc 之后的正则表达式应该重复。
例如:
abc 23(340, 223, 243)
abc 3(336,455,344,880,567), 32(323,344,464)
我试过这样做:
/^abc(\s((?!(0))\d{1,2}[(]([1-9][0-9]*[,]){2}([1-9][0-9]*[,]*)+[)])([,]*))+/g
/^abc(\s((?!(0))\d{1,2}[(]([1-9][0-9]*[,]){2}(([1-9][0-9]*)[,]*)+[)])(([,]\s((?!(0))\d{1,2}[(]([1-9][0-9]*[,]){2}(([1-9][0-9]*)[,]*)+[)]))*))+/g
这些表达式不包括小于 33 的大小写,并且这些表达式还允许大小写:
abc 23(323,345,455),
abc 23(323,345,455), 34()
哪些不是必需的。
下面的怎么样:
^abc\s(?:(?:[1-9]|[12][0-9]|3[0-3])\(\d+(?:,\s?\d+){2,}\))(?:,\s?(?:(?:[1-9]|[12][0-9]|3[0-3])\(\d+(?:,\s?\d+){2,}\)))*$
针对给定的 4 个样本进行测试:https://regex101.com/r/pb8Ipv/2
如果要处理匹配的组,请将 (?:
替换为 (
。
编辑
解决了在 abc 之后匹配单个数字的问题
您可以使用重复的非捕获组:
^abc (?:[1-9]|[12][0-9]|3[0-3])\([1-9][0-9]*(?:, ?[1-9][0-9]*){2,}\)(?:, (?:[1-9]|[12][0-9]|3[0-3])\([1-9][0-9]*(?:, ?[1-9][0-9]*){2,}\))*$
^
字符串开头
abc
匹配abc和space
(?:
非捕获组
[1-9]|[12][0-9]|3[0-3]
匹配数字 1 - 33
)
关闭群组
\(
匹配 (
[1-9][0-9]*
匹配一个数字1-9并重复0+个数字0-9
(?:, ?[1-9][0-9]*){2,}
匹配一个逗号,可选space并重复2次或更多次以匹配最少3个数字
\)
匹配 )
(?:
非捕获组
,
匹配一个逗号和一个 space
(?:[1-9]|[12][0-9]|3[0-3])\([1-9][0-9]*(?:, ?[1-9][0-9]*){2,}\)
重复第一个模式
)*
关闭组重复0+次
$
字符串结束
我正在尝试创建以 abc 开头的正则表达式,然后是 space,然后是不应以 0 开头且应小于 33 的 2 位数字,然后在括号中至少应有 3数字之间用逗号分隔并 space。在那之后如果逗号然后 abc 之后的正则表达式应该重复。
例如:
abc 23(340, 223, 243)
abc 3(336,455,344,880,567), 32(323,344,464)
我试过这样做:
/^abc(\s((?!(0))\d{1,2}[(]([1-9][0-9]*[,]){2}([1-9][0-9]*[,]*)+[)])([,]*))+/g
/^abc(\s((?!(0))\d{1,2}[(]([1-9][0-9]*[,]){2}(([1-9][0-9]*)[,]*)+[)])(([,]\s((?!(0))\d{1,2}[(]([1-9][0-9]*[,]){2}(([1-9][0-9]*)[,]*)+[)]))*))+/g
这些表达式不包括小于 33 的大小写,并且这些表达式还允许大小写:
abc 23(323,345,455),
abc 23(323,345,455), 34()
哪些不是必需的。
下面的怎么样:
^abc\s(?:(?:[1-9]|[12][0-9]|3[0-3])\(\d+(?:,\s?\d+){2,}\))(?:,\s?(?:(?:[1-9]|[12][0-9]|3[0-3])\(\d+(?:,\s?\d+){2,}\)))*$
针对给定的 4 个样本进行测试:https://regex101.com/r/pb8Ipv/2
如果要处理匹配的组,请将 (?:
替换为 (
。
编辑
解决了在 abc 之后匹配单个数字的问题
您可以使用重复的非捕获组:
^abc (?:[1-9]|[12][0-9]|3[0-3])\([1-9][0-9]*(?:, ?[1-9][0-9]*){2,}\)(?:, (?:[1-9]|[12][0-9]|3[0-3])\([1-9][0-9]*(?:, ?[1-9][0-9]*){2,}\))*$
^
字符串开头abc
匹配abc和space(?:
非捕获组[1-9]|[12][0-9]|3[0-3]
匹配数字 1 - 33
)
关闭群组\(
匹配(
[1-9][0-9]*
匹配一个数字1-9并重复0+个数字0-9(?:, ?[1-9][0-9]*){2,}
匹配一个逗号,可选space并重复2次或更多次以匹配最少3个数字
\)
匹配)
(?:
非捕获组,
匹配一个逗号和一个 space(?:[1-9]|[12][0-9]|3[0-3])\([1-9][0-9]*(?:, ?[1-9][0-9]*){2,}\)
重复第一个模式
)*
关闭组重复0+次$
字符串结束