MySQL REGEXP: Найти строку, кроме двух символов - PullRequest
0 голосов
/ 20 января 2020

Я хочу иметь возможность выбирать строки из таблицы, где указанная строка появляется в столбце TEXT , если только единственный вид этой строки находится между двумя обратными галочками.

Например, , если бы я хотел, чтобы все строки, в которых столбец «Message» содержал «foo» ...

'что-то foo что-то'

, было бы возвращено, но

'что-то `что-то foo что-то` что-то'

не

Это то, что у меня есть, но я понимаю, почему это действительно не работает. Я довольно новичок в REGEXP и не могу думать, где go с этим следующим.

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Вопрос несколько двусмысленный. Что должно произойти для каждого из них:

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.

Если задние части "спарены" ", возможно, было бы лучше задать вопрос, используя скобки, скобки или скобки.

0 голосов
/ 20 января 2020

Вы можете использовать

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

То есть LIKE '%foo%' проверяет, содержит ли запись foo, а NOT LIKE '%% foo% %' проверяет, нет ли foo внутри обратных кавычек .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...