1

これが私が持っている例です:

JELLY2some text

some text{JELLY2}some textsome textsome text
Sample text for testing:
some textJELLY2 {some text JELLY2 lsdkfjsd}にsome text

次のような括弧内のものを除くすべてを取得したいJELLY2:

{JELLY2}

{some text JELLY2 lsdkfjsd}

http://regexr.com/3dhsl

次のような select ステートメントでデータを取得する必要があります。

SELECT `id` FROM `table` WHERE `body` REGEXP 'JELLY2'

それとも、RLIKE やその他の方法で可能でしょうか?

SELECT `id` FROM `table` WHERE `body` RLIKE 'JELLY2'
4

2 に答える 2

1

これを 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);
于 2016-06-02T09:12:25.223 に答える