mysql - RegExp 用于搜索包含子字符串 '123' 但不包含子字符串 '234' 的字符串

标签 mysql regex regex-lookarounds

需要从表中选择包含一个或多个子字符串且不包含其他子字符串的行。做出一种表达很重要。

Google 表示像 ^(?=.*subs1)(?!.*subs2)$ 这样的正则表达式可以工作,但对我不起作用(也在 https://regexr.com/ 上进行了测试)

例如

SELECT * FROM TABLE WHERE target_string REGEXP "^(?=.*subs1)(?!.*subs2)$"

bla/subs1/bla/bla -> true(作为查询结果返回)

bla/subs1/bla/subs2 -> 假

bla/bla/subs2/bla -> 假

一个表达式中的 2 个条件不起作用(单独起作用) 感谢您的帮助!

最佳答案

WHERE foo     LIKE '%123%'
  AND foo NOT LIKE '%234%'

WHERE foo REGEXP '123[^4]'  -- rejects '1234', but accepts '123x234' -- OK?

(这应该适用于所有版本的 MySQL 或 MariaDB。)

关于mysql - RegExp 用于搜索包含子字符串 '123' 但不包含子字符串 '234' 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56026009/

相关文章:

mysql - 如何使用sql从数据库中的日期列中导出年龄?

mysql - 如何在 Firebird 中进行多选查询

MySQL - Mac - 错误 2002 - 无法连接到本地...通过套接字

javascript - 使用javascript删除字符串中最后出现的逗号

javascript - 有没有办法只将顶级括号与正则表达式匹配?

Java regex lookbehind 不能像 js regex lookbehind 那样工作

MySQL Workbench::无法向现有表添加第二个外键

regex - Shell脚本linux,验证整数

javascript - 如何在 JavaScript Regex 中使用/不使用负前瞻来匹配带有标记的文本表达式

python - 正则表达式以在 Python 中以未知的出现顺序捕获不同的元素