MySQL中使用正则表达式匹配指定模式字符串的技术咨询
MySQL匹配指定模式字符串的解决方案
要实现你需要的匹配规则,我们可以通过两个正则条件组合来完成——既匹配基本的模式结构,又排除不符合要求的特殊情况,这样兼容性更好(适配大多数MySQL版本)。
最终查询语句
SELECT your_column_name FROM your_table_name WHERE -- 匹配核心模式:开头非空字符 + 短横线 + 非空字符 + 结尾的in ('true') your_column_name REGEXP '^.+-.+in \\(\'true\'\\)$' -- 排除短横线与in ('true')之间存在" and "的情况 AND your_column_name NOT REGEXP '-.* and .*in \\(\'true\'\\)';
规则拆解与解释
我们逐个对应你的需求:
- 以至少一个非空字符开头:正则里的
^.+匹配字符串开头的至少一个任意非空字符(^锚定开头,.+匹配1个及以上任意字符)。 - 后跟字面量短横线
-:直接用-匹配字面量短横线,确保开头字符后紧跟这个符号。 - 再后跟至少一个非空字符:
-.+里的第二个.+完成这部分要求,匹配短横线后的至少一个非空字符。 - 最后衔接
in ('true'):in \\(\'true\'\\)$匹配结尾的目标字面量(括号和单引号是正则特殊字符,所以用双反斜杠转义,$锚定字符串结尾)。
额外的排除规则:短横线与in ('true')之间不得出现" and ",通过NOT REGEXP '-.* and .*in \\(\'true\'\\)'实现——这个正则会匹配所有短横线后出现" and "再到in ('true')的字符串,用NOT排除它们。
示例验证
- ✅ 符合规则:
segment-123 in ('true')→ 满足核心模式,且短横线与目标字面量之间无" and "。 - ❌ 不符合规则:
content-foo and segment in ('true')→ 会被第二个条件排除,因为短横线后出现了" and "子串。
内容的提问来源于stack exchange,提问作者Lyn
相关产品推荐
相关产品推荐

