MySQL REGEXP:查找两个字符之间的字符串 exept



我希望能够从给定字符串出现在 TEXT 列中的表中选择行,除非该字符串的唯一外观在两个反引号之间。

例如,如果我想要"消息"列包含"foo"的所有行......

"嘟

将被退回,但

">

某物">某物"某物">

不会

这就是我到目前为止所拥有的,但我理解为什么这真的不起作用。我对 REGEXP 相当陌生,想不出接下来该怎么做。

SELECT * FROM Posts 
WHERE Message REGEXP '[^`]*foo[^`]*';

您可以使用

WHERE Message LIKE '%foo%' AND WHERE Message NOT LIKE '%`%foo%`%'

也就是说,LIKE '%foo%'检查记录是否包含fooNOT LIKE '%%foo%%'确保反引号内没有foo

这个问题有些模棱两可。 对于这些中的每一个应该发生什么:

a`b`c foo d`e`f  -- technically, "foo" is between a pair of backtics
a`b`c foo `end of string -- odd number of backtics

假设背流是"配对"的:

REGEXP "^([^`]*(`[^`]*`))*[^`]*foo"

笔记

[^`]*  -- many string without a backtic, even the empty string
(`[^`]*`)  -- match a string inside a pair of backtics
(...)* -- match any number of such, then
*[^`]*foo -- match "foo" not in paired backtics.

如果背针是"配对"的,最好使用括号、括号或大括号来提问。

最新更新