我希望能够从给定字符串出现在 TEXT 列中的表中选择行,除非该字符串的唯一外观在两个反引号之间。
例如,如果我想要"消息"列包含"foo"的所有行......
"嘟嘟�
将被退回,但
">某物">某物"某物">
不会
这就是我到目前为止所拥有的,但我理解为什么这真的不起作用。我对 REGEXP 相当陌生,想不出接下来该怎么做。
SELECT * FROM Posts
WHERE Message REGEXP '[^`]*foo[^`]*';
您可以使用
WHERE Message LIKE '%foo%' AND WHERE Message NOT LIKE '%`%foo%`%'
也就是说,LIKE '%foo%'
检查记录是否包含foo
并NOT 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.
如果背针是"配对"的,最好使用括号、括号或大括号来提问。