2016-11-22 4 views
0

正規表現を作成して、単語の前に「not」または「no」がない単語を見つける方法を教えてください。私はライン1とライン4notまたはnoの前にある場合除外する正規表現

Line 1: a bad rider 

Line 2 : apple is not bad 

Line 3 : there is no bad remarks. 

Line 4 : no there is nothing bad 

を見つける必要があります以下の例では

は、それがOracle SQLでサポートされていないとして、それが可能先読みなしでそれを行うことです。

+0

使用[ '(?<!ではない)(?<!なし)\ bbad \ B'](https://regex101.com/r/ywMEV6/1) –

+0

私は、Oracleでそれを行う必要があります正規表現。否定的な先読みはサポートされていないようです。それは否定的な先読みなしでそれをすることは可能ですか? – snowrock

+1

いいえ、Oracleでは純粋な正規表現は使用できません。 –

答えて

-1

試してみてください。

select * 
from table 
where regexp_like(column, 'bad') and NOT regexp_like(column, '(not|no) bad') 

か、単に(おそらく最速):

select * 
from table 
where column like('%bad%') 
    and not (column like '%not bad%' or column like '%no bad%'); 
+0

もう一度ありがとう。それは期待どおりに働いた。 – snowrock

+0

テストデータを追加してください! "結び目が悪かったのですか?"それをテストするときは、not/noの両側にスペースを入れてください。そしてそれは別の言葉の一部でもあり得るので、そのことについては「悪い」。 –

0

私は、これはあなたが少し近づくと「ない」または「悪い」は一部である場合を可能にしてもよいと考えています別の言葉の正規表現では、空白文字の後に空白文字または "いいえ"が続き、空白文字の後に空白文字または行末が続く "bad"が続きます(別の単語の一部ではありません)。あなたが確信するまで、テストフレーズを追加してください!つまり、行5が疑問符で終わったような特殊文字を許可する必要がありますか?

SQL> with tbl(data) as (
    2 select 'Line 1: a bad rider' from dual union 
    3 select 'Line 2 : apple is not bad' from dual union 
    4 select 'Line 3 : there is no bad remarks.' from dual union 
    5 select 'Line 4 : no there is nothing bad' from dual union 
    6 select 'Line 5 : was that knot bad' from dual union 
    7 select 'Line 6 : let''s play badminton' from dual union 
    8 select 'Line 7 : let''s play no badminton' from dual 
    9 ) 
10 select * 
11 from tbl 
12 where not regexp_like(data, ' (not|no) bad(|$)'); 

DATA 
--------------------------------- 
Line 1: a bad rider 
Line 4 : no there is nothing bad 
Line 5 : was that knot bad 
Line 6 : let's play badminton 
Line 7 : let's play no badminton 

SQL> 
関連する問題