2016-07-19 6 views
1

は少しSQLが選択することがあります。MySQLは、「フルストップ」と同じように正規表現を選択し

select * from import_daten WHERE lastname REGEXP 'dipl\.|dr\.'; 

そして、ちょうどINGと行をフィルタします。とディップ。その声明で、私はまた、例えば、姓の "Abendroth"。名前の "dr"のためです。

同じことが

select * from import_daten WHERE lastname REGEXP 'dipl.|dr.'; 

どのようにしているそれは、フルストップ正しい正規表現の中に含めることが可能ですか?

+1

を私は「Abendroth」はその正規表現に一致することができない方法を参照してくださいません。 –

+0

ああ...申し訳ありません。私は意味しています。私は博士を意味しました。私は質問でそれを変更しました。だから、 'dipl | ing。'あなたは正しい、それは "Abendroth"しかし "dr。"と一致することはできません一致します。 – swapfile

答えて

1
REGEXP '(dipl|dr)[.]' 

単語の開始/終了のように注意してください:それが失敗したか

mysql> SELECT 'dr.' REGEXP 'dr[.][[:>:]]', 'dr.' REGEXP 'dr[.]'; 
+-----------------------------+----------------------+ 
| 'dr.' REGEXP 'dr[.][[:>:]]' | 'dr.' REGEXP 'dr[.]' | 
+-----------------------------+----------------------+ 
|       0 |     1 | 
+-----------------------------+----------------------+ 

お知らせ?これは、.が '単語'に存在できる文字ではないためです。

また、エスケープ文字をエスケープするという問題のため\.の代わりに[.]を使用しました。状況によっては\\.が必要です。他には\\\\.が必要かもしれません。あまりにも混乱します。

あなたは「単語の開始」を使用することができ、必要な場合は、次のREGEXP '[[:<:]](dipl|dr)[.]'

1

私はあなたがこの

select * from import_daten WHERE lastname REGEXP '(dipl\.)|(ing\.)'; 
+0

うん、thx、しかし本当は。それと私はまた、 "abendrothの"を取るが、私はちょうど "博士Abenroth"が欲しい。 – swapfile

1

あなたはおそらくパターンであることを確認したいしたいと思います「単語の境界。」 MySQLの正規表現の構文は、そのための特別な文字列を持っています

select * from import_daten WHERE lastname REGEXP '[[:<:]](dipl\.|dr\.)[[:>:]]'; 

http://dev.mysql.com/doc/refman/5.7/en/regexp.htmlを参照してください。そのページのユーザーコメントの前には、ページの最後の項目に近いものです。

関連する問題