Oracle REGEXP_LIKE Examples
正規表現は、文字列内の文字の組み合わせを一致させるために使用されるパターンです。 Oracle10gでは、さまざまな関数を使用する正規表現のサポートが導入されました。 この記事では、Oracle REGEXP_LIKE関数に焦点を当て、その使用方法を説明します。Oracle REGEXP_LIKEは、(LIKEによって実行される単純なパターンマッチングではなく)正規表現のマッチングを実行するために使用されます。
構文
REGEXP_LIKE ( string expression, pattern )
- 文字列式–文字列式。
- pattern–正規表現の一致パターン
- matchパラメータ–Oracle REGEXP_LIKE関数のデフォルトの一致動作を変更できます(たとえば、検索を大文字と小文字を区別から大文字と
基本的なOracle REGEXP_LIKEの例
まず、Namesという名前の表を作成し、その値に基づいて、次のOracle REGEXP_LIKEの例では、異なる正規表現検索が実行されます。次のOracle REGEXP_LIKEの例では、文字’z’を含むすべての名前が取得されます。 このOracle SELECT文では、実際には文字’z’の前後の文字数に下限または上限は設定されていません(任意の数の文字を使用できます)が、単語に文字’z’を含める必次のOracle REGEXP_LIKEの例では、文字列’be’を含むすべての名前が取得されます。 この場合も、このOracle SELECT文では、実際には文字列’be’の前後の文字数に下限または上限はありません(任意の数の文字を使用できます)が、単語に文字列’be’を含p>
SELECT *FROM namesWHERE regexp_like (name , 'be') ;NAME---------------------------AbelGreenberg
パイプ(|)演算子の使用
パイプ演算子(|)は、代替一致を指定するために使用されます。 次のOracle REGEXP_LIKEの例では、パイプ演算子(|)を使用して、文字列’be’または’ae’を含むすべての名前を取得します。 このOracleのSELECT文では、実際には、文字列’be’または’ae’の前後の文字数に下限または上限はありません(任意の数の文字を使用できます)が、これらの文字列を含
SELECT *FROM namesWHERE regexp_like (name , 'be|ae') ;NAME-------------------------BaerAbelRaphaelyGreenberg
文字’c’を(REGEXP_LIKE関数の3番目の引数として)指定することで、大文字と小文字を区別する検索を行うことができます(Oracleのデフォル
SELECT *FROM namesWHERE regexp_like (name , 'be|ae' , 'c' ) ;NAME-------------------------BaerAbelRaphaelyGreenberg
そして、文字’i’を(REGEXP_LIKE関数の3番目の引数として)指定することで、大文字と小文字を区別しない検索を行うことができます。
SELECT *FROM namesWHERE regexp_like (name , 'be|ae' , 'i' ) ;NAME-------------------------BellBernsteinBaerAbelRaphaelyGreenberg
キャレット(^)演算子を使用して
キャレット(^)演算子を使用して行の先頭文字を示すことができます。REGEXP_LIKEの例では、文字シーケンス’be’または’ba’で始まるすべての名前を取得します(大文字と小文字を区別しない検索)
SELECT *FROM namesWHERE regexp_like (name , '^be|^ba' , 'i' ) ;NAME-------------------------BaidaBellBandaBatesBernsteinBaer
ドルを使用して、
SELECT *FROM namesWHERE regexp_like (name , '^be|^ba' , 'i' ) ;NAME-------------------------BaidaBellBandaBatesBernsteinBaer
(es)演算子
ドル(/)演算子を使用して行末文字を示すことができます。このregexp_likeの例では、文字シーケンス’es’または’er’で終わるすべての名前を取得します(大文字と小文字を区別しない検索)。
SELECT *FROM namesWHERE regexp_like (name , 'es$|er$' , 'i' ) ;NAME-------------------------PhiltankerColmenaresJonesGatesDaviesNayerStilesDellingerBatesBaer
角括弧を使用して
角括弧を使用して、その中に表される式のいずれかに一致する一致リストを指定できます。 次のOracle REGEXP_LIKEの例では、文字’j’または’z’を含むすべての名前が取得されます。
SELECT *FROM namesWHERE regexp_like (name , '') ;NAME-------------------------RajsLorentzGietzOzerErrazuriz
このREGEXP_LIKEの例では、文字’b’または’z’または’E’を含むすべての名前を取得します(大文字と小文字を区別する検索)
SELECT * FROM names WHERE regexp_like (name , '') ;NAME-------------------------TobiasCabrioEverettLorentzPataballaErnstCambraultGietzMcEwenCambrault
次に、最後のクエリを変更し、大文字と小文字を区別しない検索にします :このOracle REGEXP_LIKEの例では、文字’a’、’b’、または’c’を含むすべての名前が取得されます。
SELECT *FROM namesWHERE regexp_like (name , '') ;NAME-------------------------PhiltankerMarkleLandryColmenaresPatelVargasSullivanMarlowGrantMatos
文字’a’、’b’、および’c’を別々に指定する代わりに、範囲を指定できます。
SELECT *FROM namesWHERE regexp_like (name , '') ;NAME-------------------------PhiltankerMarkleLandryColmenaresPatelVargasSullivanMarlowGrantMatos
次のoracle regep_likeの例では、’D’および’g’の範囲の文字を含むすべての名前を取得し、その後に文字’a’が続きます。p>
SELECT *FROM namesWHERE regexp_like (name , 'a') ;NAME-------------------------VargasBaidaFleaurBanda
ピリオドを使用して(.)演算子
ピリオド(. 次のOracle REGEXP_LIKEの例では、’b’および’g’の範囲内の文字を含むすべての名前、その後に任意の文字、その後に文字’a’が続く名前が取得されます。ピリオド演算子を使用して複数の文字を表すことができ、次のOracle REGEXP_LIKEの例では、’b’および’g’の範囲内の文字を含むすべての名前を取得し、その後に任意の2文字、その後に文字’a’が続きます。
SELECT *FROM namesWHERE regexp_like (name , '..') ;NAME-------------------------De HaanKochhar
中括弧の使用
中括弧は、二重の’o’文字を含むすべての名前を表示するなど、正確な出現数を指定するために使用されます。p>
SELECT *FROM namesWHERE regexp_like (name , '{2}') ;NAME-------------------------KhooBloom