2009-06-05 34 views
3

私は、[内の<のsomeothertext >](つまり、角括弧、テキスト、左角括弧、テキスト、右角括弧、右角括弧)の文字列をmySQL。このクエリはエラーを受け取っていないが、それは、私はdidnのものを返さmySQLの大括弧付き正規表現

SELECT * FROM message WHERE msgtext REGEXP '\\[(.+)?<(.+)?>\\]' 

:もともと私は、次のクエリ(正規表現のクエリは、MySQLで二回エスケープされているので、あなたは通常1を使用する2つのバックスラッシュを使用しなければならないという通知)を使用しました欲しい。 (。+)の代わりに、私は[^ \]](右角括弧を除くすべてにマッチする)を望んでいました。クエリを変更したときに、次のエラーが表示されました。「regexpからの反復演算子オペランドが無効です」

mySQLのマニュアルhereを読んだ後は、開き括弧[。 " "]"の代わりに "^ \]"が必要なので、カッコを開き括弧の後の最初の文字にすることはできないので、これも可能ですか?以下は上記と同じエラーを取得し、私が試してみましたクエリの一部です:

SELECT * FROM message WHERE msgtext REGEXP '\\[([^\\]]+?)<([^\\]]+?)>\\]' 
SELECT * FROM message WHERE msgtext REGEXP '\\[[^\\]]+?<[^\\]]+?>\\]' 
SELECT * FROM message WHERE msgtext REGEXP '\\[[^[.right-square-bracket.]]]+?<[^[.right-square-bracket.]]]+?>\\]' 

はUPDATE:

次のクエリがエラーなしで実行されますが、私は列がある知っているにもかかわらず、任意の行を返しませんこれは、私が(一番上の私の元のクエリに基づく)を探していたものと一致:

SELECT * FROM message WHERE msgtext REGEXP '\\[([^\\]]+)?<([^\\]]+)?>\\]' 

答えて

6

SELECT '[sometext<someothertext>]' REGEXP '\\[([^[.right-square-bracket.]]+)?<([^[.right-square-bracket.]]+)?>\\]$'; 
0

最終的な正規表現は正しく見えるとスラッシュはエスケープされた後のFirefox/JSで動作します。しかし、MySQLはキャプチャグループをネイティブにサポートしているようには見えません。おそらくそれが問題です。

おそらくこれは便利だろう:http://mysqludf.com/lib_mysqludf_preg/

また、あなたの代わりに+の*を試してみてください?あなたの否定された右の正方形のために。

*は0回以上の繰り返しを意味します(欲張り)
+?意味これは私の作品1回以上の繰り返し(怠け者)

関連する問題