如何正则匹配仅含7、8、9的字符串,排除其他无效内容
正则表达式修改方案
需求:匹配仅由单个数字7、8、9组成的逗号分隔字符串,字符串中只要包含非7/8/9的项(多位数、文本等),匹配直接失败。
原正则/(?<=^|,)[789](?=,|$)/gm的问题是仅能匹配单个有效数字,但无法校验整个字符串是否全为有效项,因此即使存在无效内容,仍会匹配到其中的有效数字。
修改后的正则表达式
^[789](,[789])*$
正则解析
^:锚定字符串开头,确保匹配从字符串起始位置开始[789]:匹配第一个有效项(单个7、8或9)(,[789])*:匹配0次或多次「逗号+单个有效数字」的组合,支持1个或多个有效项的场景$:锚定字符串结尾,确保整个字符串都符合规则
示例验证
- 有效匹配:
7,8,9,8,7:全为单个7/8/9,符合规则8:单个有效数字,符合规则
- 匹配失败:
8,9,77:包含两位数77,不符合8,17:包含17(含非7/8/9的数字1),不符合9,thisistextbetweencomma,7,9,19:包含文本和19,不符合
该正则适配SQL Server的RegexMatches自定义表值函数,可先通过此正则判断字符串是否完全有效,再进行后续聚合操作。
内容的提问来源于stack exchange,提问作者Code Novice
相关产品推荐
相关产品推荐

