2012-02-08 44 views
1

オープンソースコードを参照しています。そこで私はこの種のフィルタを持つSQLを見つけることができます。__ * in Mysqlの正規表現

select sometext from table1,table2 where table1.sometext LIKE 
CONCAT('% ',table2.test_keyword,' %') AND table2.test_keyword NOT 
REGEXP '__*'; 

このSQLでは__ *とは何ですか?

+1

正規表現の本に相談しましたか? –

答えて

5

__*は、_の後にゼロ以上の_sが一致します。

__* 
^^^ 
||\__ (zero or more) ^
|\___ underscore   | 
\____ underscore, then | 

_+は、同じ仕事をしているだろう。

_+ 
^^ 
|\__ (one or more)  ^
\___ underscore   | 
+0

'_'の後に** ** ** **以上の' _'が続きます。 – kennytm

+1

@ケニーTM:それは私が書いたものです! ;) –

1

単なる1つ以上のアンダースコアです。

パターンが最良として読まれる:

  • '_'、ゼロまたはそれ以上のアンダー続く正確に一つのアンダー、
  • '_*'、。

それは基本的にそれに下線を持つ任意の文字列を意味して(、開始マーカーなしで、文字列の任意の場所でパターンに一致しますが、覚えておいてくださいまたは、より正確に、あなた以降」 NOT、文字列なし、アンダースコア)を使用しています。

AND table2.test_keyword NOT REGEXP '_'と同じ効果を得ることができるので、それはまた不必要に複雑です。

正規表現に関する最新のMySQLドキュメントについてはを参照してください(この回答時点では5.6)。