正規表現
正規表現とは、ストリングをマッチングおよび操作するためのパターンとしての動作する文字シーケンスです。 正規表現は、fn:matches 関数、fn:replace 関数、および fn:tokenize 関数で使用されます。
構文
- 文字
- 正規表現において、character はメタキャラクターでない通常の XML 文字です。
- メタキャラクター
- メタキャラクターは、正規表現における制御文字です。 現在サポートされている正規表現メタキャラクターは、以下のとおりです。
- バックスラッシュ (\)
- 文字クラス・エスケープを開始します。 文字クラス・エスケープは、それに続くメタキャラクターを、メタキャラクターではなく文字として使用することを示します。
- ピリオド (.)
- 改行文字 (\n) を除く任意の単一文字に一致します。
- 脱字記号 (^)
- 文字クラス外に脱字記号文字が現れる場合、その脱字記号に続く文字列は、入力ストリングの先頭、または複数行入力ストリングの場合は行の先頭に一致します。 入力ストリングを使用する関数に
mフラグが含まれている場合、その入力ストリングは複数行入力ストリングであるとみなされます。脱字記号文字が文字クラス内の先頭文字として現れる場合、その脱字記号は否定記号として機能します。 正規表現に対して比較されているストリング内に、文字グループ内の文字がどれも現れない場合に、一致します。
- ドル記号 ($)
- 入力ストリングの末尾、または複数行入力ストリングの場合は行の末尾に一致します。 入力ストリングを使用する関数に
mフラグが含まれている場合、その入力ストリングは複数行入力ストリングであるとみなされます。 - 疑問符 (?)
- 正規表現内の前の文字または文字グループに 0 回か 1 回一致します。
- アスタリスク (*)
- 正規表現内の前の文字または文字グループに 0 回以上一致します。
- 正符号 (+)
- 正規表現内の前の文字または文字グループに 1 回以上一致します。
- { n }
- 正規表現内の前の文字または文字グループに正確に n 回、一致します。 n は正整数でなければなりません。
- { n, m }
- 正規表現内の前の文字または文字グループに少なくとも n 回、しかも m 回を超えない範囲で一致します。 n は正整数でなければならず、m は n 以上の正整数でなければなりません。
- { n, }
- 正規表現内の前の文字または文字グループに少なくとも n 回、一致します。 n は正整数でなければなりません。
- 左大括弧 ([) および右大括弧 (])
- 左大括弧と右大括弧、および囲まれている文字グループが、文字クラスを定義します。 例えば、文字クラス [aeiou] は、任意の単一母音に一致します。 文字クラスは、文字の範囲もサポートします。 以下に例を示します。
- [a-z] は、任意の小文字を意味します。
- [a-p] は、a から p までの任意の小文字を意味します。
- [0-9] は、任意の単一の数字を意味します。
- 左括弧 (() および右括弧 ())
- 左括弧と右括弧は、正規表現内の一部の文字のグループ化を示します。 その後、反復演算子などの演算子をグループ全体に適用できます。
- character-class-escape
- 文字クラス・エスケープは、特定の特殊文字を、何らかの機能を実行させるのではなく、文字として扱うことを指定します。 文字クラス・エスケープは、バックスラッシュ (\) と、それに続く単一のメタキャラクター、改行文字、リターン文字、またはタブ文字で構成されます。 次の表に、文字クラス・エスケープをリストします。
表 1. 単一文字の文字クラス・エスケープ 文字エスケープ 表される文字 説明 \n#x0A 改行 \r#x0D 復帰 \t#x09 タブ \\\ 円記号 \|| パイプ \.. ピリオド \?? 疑問符 (?) \** アスタリスク \++ 正符号 \(( 左括弧 \)) 右括弧 \{{ 左中括弧 \}} 右中括弧 \$$ ドル記号 \-- ダッシュ \[[ 左大括弧 \]] 右大括弧 \^^ キャレット - character-group
- 文字グループは、文字クラス内の文字のセットです。 文字クラスはマッチングに使用されます。 文字列、文字の範囲、文字クラスのエスケープ、およびオプションの左脱字記号で構成されます。 脱字記号が含まれている場合、残りの文字グループによって定義されている文字のセットの補集合を示します。
例
以下の例は、それぞれのメタキャラクターがどのように正規表現に影響するかを示しています。
- "hello[0-9]world" は、"hello3world" に一致しますが、"hello world" には一致しません。
- "^hello" は次のテキストに一致します。
hello worldただし、"^hello" は次のテキストには一致しません。world hello - "hello$" は次のテキストに一致します。
world helloただし、"hello$" は次のテキストには一致しません。
hello world - "(ca)|(bd)" は "arcade" または "abdicate" に一致します。
- "^((ca)|(bd))" は "arcade" または "abdicate" には一致しません。
- "w?s" は "ws" または "s" に一致します。
- "w.*s" は "was" または "waters" に一致します。
- "be+t" は "beet" または "bet" に一致します。
- "be{1,3}t" は "bet"、"beet"、または "beeet" に一致します。
- "\[n\]" は "[n]" に一致します。
