mySQL の列内で '[sometext<someothertext>]' (つまり、左角かっこ、テキスト、左山かっこ、テキスト、右山かっこ、右角かっこ) のような文字列を一致させようとしています。もともと私は次のクエリを使用していました (正規表現クエリは mySQL で 2 回エスケープされるため、通常 1 つを使用するところに 2 つのバックスラッシュを使用する必要があることに注意してください)。
SELECT * FROM message WHERE msgtext REGEXP '\\[(.+)?<(.+)?>\\]'
このクエリはエラーを受け取りませんでしたが、望ましくないものが返されました。(.+) の代わりに、[^\]] (右角かっこ以外のすべてに一致) が必要でした。クエリを変更すると、次のエラーが表示されました。
ここでmySQL ドキュメントを読んだ後、「リテラル ] 文字を含めるには、開始ブラケット [. 「]」の代わりに「^\]」が必要なので、ブラケットを左ブラケットの後の最初の文字にすることはできないため、これは可能ですか? 以下は、上記と同じエラーが発生する、私が試したクエリの一部です。
SELECT * FROM message WHERE msgtext REGEXP '\\[([^\\]]+?)<([^\\]]+?)>\\]'
SELECT * FROM message WHERE msgtext REGEXP '\\[[^\\]]+?<[^\\]]+?>\\]'
SELECT * FROM message WHERE msgtext REGEXP '\\[[^[.right-square-bracket.]]]+?<[^[.right-square-bracket.]]]+?>\\]'
アップデート:
次のクエリはエラーなしで実行されますが、探しているものと一致する列があることがわかっているにもかかわらず、行が返されません (最初のクエリに基づいて)。
SELECT * FROM message WHERE msgtext REGEXP '\\[([^\\]]+)?<([^\\]]+)?>\\]'