MySQL Regexp将CSV限制重复为340个逗号

o7jaxewo  于 2023-03-09  发布在  Mysql
关注(0)|答案(1)|浏览(86)

我尝试创建regexp来验证以ID开头的逗号分隔的名称值对,如下所示

select
'ID,2190,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def,abc,def'

regexp 
'^ID,[1-9][0-9]*(,[^,]+,[^,]*)*$'

上面的查询将输出0而不是1,但是如果我减少一对,abc,def,这将减少逗号的数量,查询将输出1
我尝试过更改服务器,在共享服务器上,查询运行良好,与值的数量无关
有人能告诉我,我的查询失败是因为服务器配置还是因为regexp模式中的某个错误?在这里,我尝试将捕获组重复0到无限次

a11xaf1n

a11xaf1n1#

解决方案是使用非捕获组(?:)代替捕获组()

'^ID,[1-9][0-9]*(?:,[^,]+,[^,]*)*$'

Andy的注解对regex101链接很有用,在描述中它指出,当数据不重要时,您应该使用非捕获组
重复的捕获组将仅捕获最后一个迭代。在重复的组周围放置一个捕获组以捕获所有迭代,或者如果您对数据不感兴趣,则使用非捕获组

相关问题