正規表現を使用してMySQLテーブルから結果を選択するのに問題があります。
このクエリを使用しています
SELECT text
FROM `articles`
WHERE content REGEXP '.*<img.*?src=\"http://www'
ORDER BY date DESC
そしてそれは言う
#1139 - Got error 'repetition-operator operand invalid' from regexp
私はNotepad ++で正規表現をテストしましたが動作しますが、MySQLがなぜこのエラーを出しているのですか、どうすれば修正できますか?
MySQLマニュアル によると
MySQLは、POSIX 1003.2への準拠を目的としたヘンリースペンサーの正規表現の実装を使用します。
POSIX正規表現 疑問符?
をスターの貪欲でない(レイジー)修飾子として使用することと、PCRE(Perl互換の正規表現)などの数量詞をサポートしない。つまり、+?
および*?
は使用できません。
貪欲なバージョンを使用する必要があるようですが、それでも機能します。 <img style="/*some style*/" src="a.png"> <script src="www.example.com/js/abc.js">
などの一致を回避するには、否定された文字クラスを使用できます。
'<img[^>]*src="http://www'
注:"
はエスケープする必要はなく、最初の.*
が暗黙に示されます。
あなたが試すことができます、
SELECT
text
,
IF (content LIKE '%<img src="http://%', text , content LIKE '%<img style=%')
as imageText
FROM articles ORDER BY date DESC
これにより、コンテンツが<img src="http://
のある場所が最初に確認され、見つからない場合は、代わりに<img style=
が検索されます。
それが役に立てば幸い。
フィドルを確認: http://sqlfiddle.com/#!2/6a2f0/13/0