これを MySQL の正規表現で実行できる可能性は低く、別の言語を使用した方がよいと思いますが、MySQL 関数を記述してこれを実行することもできます。
アプローチはいくらでもあるはずです。needle
これはinのすべての出現をループし、出現の前の文字数がその前の文字数よりも少ないか同じhaystack
かどうかをチェックします。つまり、特に堅牢ではありません (混乱する可能性があります) が、これが問題である場合は、アイデアをさらに発展させることができます。{
}
}}}{JELLY2}
DELIMITER //
CREATE FUNCTION contains_text_outside_braces(needle VARCHAR(255), haystack VARCHAR(255))
RETURNS INT DETERMINISTIC
BEGIN
DECLARE pos INT;
DECLARE previous INT DEFAULT 1;
DECLARE length INT DEFAULT LENGTH(needle);
DECLARE prefix VARCHAR(255);
LOOP
SET pos = LOCATE(needle, haystack, previous);
IF pos = 0 THEN
RETURN 0;
END IF;
SET prefix = LEFT(haystack, pos - 1);
IF LENGTH(REPLACE(prefix, '{', '')) >= LENGTH(REPLACE(prefix, '}', '')) THEN
RETURN 1;
END IF;
SET previous = pos + length;
END LOOP;
END//
DELIMITER ;
SELECT * FROM example_table WHERE contains_text_outside_braces('JELLY2', content);