2016-04-02 10 views
2

文字列に(aとb)または(aとc)があるかどうかを調べるための正規表現パターンを書きたいと思います。または(bおよびc)をMySql REGEXPに入力します。mysql REGEXPの(aとb)または(aとc)または(bとc)の正規表現パターン

私はこれを書いたが、それは仕事did'nt:

a&&b|a&&c|b&&c 
(a,b)|(a,c)|(b,c) 

私はそれをどのように行うことができますか?

'a.*b|b.*a|a.*c|c.*a|b.*c|c.*b' 

例(試験データベースから):

SELECT id, url FROM `n_categories` 
WHERE url regexp 'a.*b|b.*a|a.*c|c.*a|b.*c|c.*b' 

出力例:以下の正規表現を使用して配列(a and b) or (a and c) or (b and c)から少なくとも二つの文字が含まれている必要があり、列の文字列値に一致するように

+0

はa、b、c文字または文字列ですか? – Reversal

+2

期待される出力と一緒にいくつかのサンプル文字列を投稿することができます –

答えて

1

enter image description here

+0

大括弧は不要です。 – Reversal

+0

@Reversal、fixed、thanks – RomanPerekhrest

+0

こんにちはRomanPerekhrest非常に非常に感謝します。私はあなたに素敵で良いことを願っています。 – sara

1

あなたはこれを使用することができます:

a.*(b|c)|b.*(a|c)|c.*(a|b) 

可変部分は、複数の文字にすることができます。ここではいくつかのテストデータがある:AAと

テスト後、BBとのことで
テストのb-bその後、AA、それに
テストCCとその中のAA、その後のcc
テストと、その後でそれ
テスト中のAA BB次いでAAとその中の唯一CC
試験でのみBBその中
試験とそれ
試験においてのみ、AAとそれに
試験BB次いでCCとその中のCC
試験bbおよびcc。

あなたはそれをテストするには、このSQLを適用することができます:ここで

select txt, 
     CASE WHEN txt regexp 'aa.*(bb|cc)|bb.*(aa|cc)|cc.*(aa|bb)' 
      THEN 'Yes' 
      ELSE 'No' 
     END matches 
from t 

が一致するものがあるか否かを示す、テストデータに列を追加するfiddle、次のとおりです。

|    txt   | matches | 
|----------------------------|---------| 
| test with aa then bb in it | Yes | 
| test with bb then aa in it | Yes | 
| test with aa then cc in it | Yes | 
| test with cc then aa in it | Yes | 
| test with bb then cc in it | Yes | 
| test with cc then bb in it | Yes | 
| test with only aa in it | No | 
| test with only bb in it | No | 
| test with only cc in it | No | 
| test with aa, bb and cc. | Yes | 
+0

あなたの答えもうまくいった。ありがとうございました。 – sara

関連する問題