正規表現
正規表現を使用して、セット内の各文字列で共有される共通の特性に基づいて文字列のセットを記述できます。
正規表現は、基本的にはパターン一致に使用される検索パターンを定義する一連の文字です。 正規表現は複雑さによって異なりますが、作成方法の基本を理解した後、正規表現を記述または作成できます。
文字列リテラル
最も基本的なパターン一致の形式は、文字列リテラルの一致です。 たとえば、正規表現がEMP
で、入力文字列がEMP
の場合、文字列が同一であるため、一致は成功します。 この正規表現は、EMPLOYEE
、 TEMP
、TEMPERATURE
などのEMP
を含む文字列とも一致します。
メタ文字
パターンの照合方法に影響する特殊文字を使用することもできます。 最も一般的なものの1つに、任意の文字に一致するドット(.
)記号があります。 たとえば、EMPLOYEE.ID
は、EMPLOYEE_VERIFICATION_ID
ではなくEMPLOYEE_ID
およびEMPLOYEE-ID
と照合します。 ここで、ドットはメタ・キャラクタです。 - マッチャによって解釈される特別な意味を持つ文字。
その他のメタ・キャラクタ: ^ $ ? + * \ - [ ] ( ) { }
。
メタ文字を文字どおりに(通常の文字として)処理する場合は、バックスラッシュ(\
)を使用してエスケープします。 たとえば、9\+9
が9+9
と一致する正規表現があります。
文字クラス
文字クラスは、大カッコで囲まれた一連の文字です。 これは、指定された入力文字列からの1文字に正常に一致する文字を指定します。
次の表では、一般的な正規表現の構成について説明します。
構文 | 説明 |
---|---|
[abc] |
大カッコ内に記述された文字の1つに一致します。 例: |
[^abc] |
大カッコで囲まれた文字を除く、任意の文字との照合を実行します。 例: |
[A-Z0-9] |
大カッコで囲まれた範囲内の任意の文字との照合を実行します。 範囲を指定するには、照合する最初の文字と最後の文字の間にダッシュ・メタ文字" 例: |
Oracle Data Safeでは、事前定義済文字クラスもサポートされています。
グループの取得
取得グループを使用すると、複数の文字を1つの単位として処理できます。 グループの取得は、一連のカッコ内にグループ化する文字を指定することによって作成されます。 たとえば、(SSN)
では、文字S
、S
およびN
を含む単一グループが作成されます。
修飾子
数量詞を使用して、照合する発生数を指定できます。
次の表は、一般的な数量詞を示しています。
数量子 | 説明 |
---|---|
X? |
指定された文字または文字グループの、0または1回の出現に一致します。 例: |
X* |
指定した文字または文字グループの0個以上の出現に一致します。 例: |
X+ |
指定した1つ以上の文字または文字グループに一致します。 例: |
X{n} |
指定した文字または文字グループを 例: |
X{n,} |
指定した文字または文字グループと 例: |
X{n,m} |
指定した文字または文字グループが 例: |
また、文字クラスのある数量詞およびグループの取得も使用できます。
文字クラスを使用する正規表現の例として、SSN0
、SSN1
、SSN12
などの文字列と一致するSSN[0-9]+
があります。 ここで、[0-9]
は文字クラスであり、1回以上使用できます。 正規表現がSSN
と一致しません。
取得グループを使用した正規表現の例は、SSN_NUM
とSSN_NUMBER
に一致するSSN_NUM(BER)?
です。 (BER)
は取得グループであり、0回または1回のみ使用できます。
境界正規表現エンジン
境界マッチャを使用して、一致が発生する文字列内の場所を指定することで、パターン照合をより正確にすることができます。 たとえば、特定の単語を検索することに関心がある場合がありますが、入力文字列の先頭または末尾にその単語が表示されている場合に限ります。
次の表に、共通の境界マッチャを示します。
境界構文 | 説明 |
---|---|
^ |
文字列の最初(検索で始まる)にある指定した文字または文字グループと一致します。 例: |
$ |
文字列の末尾にある、指定した文字または文字グループと一致します(検索で終了)。 例: |
\b |
単語境界を示します。 例: |
境界マッチャが指定されていない場合、含まれている検索が実行されます。 たとえば、ELECTORAL
では、ELECTORAL_ID
、ID_ELECTORAL
、ELECTORALID
などのELECTORAL
を含む文字列と一致します。
完全一致検索は、^
と$
を一緒に使用して実行できます。 たとえば、 ^ADDRESS$
では、文字列がADDRESS
かどうかを正確に検索します。 これは、文字列ADDRESS
と一致しますが、PRIMARY_ADDRESS
やADDRESS_HOME
などの文字列とは一致しません。
論理演算子
いずれかの文字または文字グループをパイプで区切って一致させる場合、パイプまたは縦棒を使用できます(|
)。 たとえば、EMPLOY(EE|ER)_ID
は、EMPLOYEE_ID
およびEMPLOYER_ID
と照合します。
例
^JOB.*(TITLE|PROFILE|POSITION)$
は、JOB
で始まる文字列と一致し、任意の文字がゼロ個以上出現した後、TITLE
、PROFILE
またはPOSITION
で終わる文字列を照合します。
^[A-Z]{3}[0-9]{2}[A-Z0-9]$
は、3文字で始まり、その後に2桁が続く文字列と一致し、文字または数字で終わります。
BIRTH.?(COUNTRY|PLACE)|(COUNTRY|PLACE).*BIRTH
は、BIRTH COUNTRY
、PATIENT_BIRTH_PLACE
、PLACE_OF_BIRTH
、EMPLOYEE'S COUNTRY OF BIRTH
などの文字列と一致します。