В руководстве MySQL не очень подробно описано, какие выражения оно поддерживает, поэтому я не уверен, возможно ли вообще следующее с MySQL.
Я пытаюсь создать запрос с RLIKE, который соответствует следующему.
Задача состоит в том, чтобы получить из SQL все предложения, которые содержат хотя бы два слова из данного предложения.
Допустим, у меня есть некоторые определенные слова, которые можно использовать в регулярном выражении:
hello, dog
У меня есть следующие предложения в базе данных:
hello from dog
hello hello cat
dog says hello
dog dog goes away
big bad dog
Из всех, кого я хочу сопоставить только
hello from dog
dog says hello
Пока у меня это так:
SELECT *
FROM test
WHERE
test RLIKE '(hello|dog).*(hello|dog)'
Проблема в том, что я получаю и ненужные
hello hello cat
dog dog goes away
Так что, я думаю, мне нужна обратная ссылка прямо перед второй (привет | собака).
Впсевдокод это выглядело бы так:
RLIKE '(hello OR dog) anything can be here (hello OR dog, but not the word which already was in the previous group)'
, поэтому могло бы быть так:
'(hello|dog).*(negative backreference to the 1st group goes here)(hello|dog)'
Можно ли сделать такую отрицательную обратную ссылку в регулярном выражении MySQL?Или, может быть, есть лучший способ написать регулярное выражение, которое делает то же самое, но также учитывая, что запрос будет сгенерирован каким-то кодом C ++, поэтому он не должен быть слишком сложным для генерации?