AOO 3.4/LO 4.0 の正規表現
Apache OpenOffice 3.4 では正規表現エンジンがライセンスの都合で ICU Regular Expressions [1] (バージョン 4.0.1) に変更されます。
追記: LibreOffice 4.0 でも正規表現エンジンが ICU Regular Expressions のものになりました。
正規表現は実装によりメタ文字や、マッチ結果が違うことがあります。以下は OpenOffice.org のヘルプまたは ICU の説明 [1] から抜粋したものです。
正規表現メタ文字
記号 | 説明 |
---|---|
\a | BELL 文字、\u0007 にマッチします。 |
\A | 入力の開始位置にマッチします。^ と違い、\A は入力後の行開始にマッチしません。 |
\b (セット外) | 単語の境界にマッチします。境界は \w から \W 文字に変わるときに現れ、連続指定は無視されます。詳細は ICU Boundary Analysis [2] を参照。 |
\b (セット内) | BACKSPACE、\u0008 にマッチします。 |
\B | 現在の位置が単語の間でないときにマッチします。 |
\cX | Control-X 文字にマッチします。 |
\d | ユニコード Nd (数値、10 進数) [2] の全ての文字にマッチします。 |
\D | \d を除く全ての文字にマッチします。 |
\e | ESCAPE 文字、\u001B にマッチします。 |
\E | \Q ... \E によるエスケープを終了させます。 |
\f | FORM FEED、\u000C にマッチします。 |
\G | 直前のマッチの終端位置にマッチします。 |
\n | LINE FEED、\u000A にマッチします。 |
\N{ユニコード 文字名} |
名前を指定した文字にマッチします。 |
\p{ユニコード プロパティ名} |
ユニコードプロパティで指定した文字にマッチします。 |
\P{ユニコード プロパティ名} |
ユニコードプロパティで指定した文字を除いた文字にマッチします。 |
\Q | \Q ... \E で文字をエスケープします。 |
\r | CARRIAGE RETURN、\u000D にマッチします。 |
\s | 空白文字にマッチします。[\t\n\f\r\p{Z}] と定義されています。 |
\S | 非空白文字にマッチします。 |
\t | HORIZONTAL TABULATION、\u0009 にマッチします。 |
\uhhhh | 十六進数 hhhh で表される文字にマッチします。 |
\Uhhhhhhhh | 十六進数 hhhhhhhh で表される文字にマッチします。\U0010ffff のような場合でも、八桁の十六進数を指定してください。 |
\w | 文字にマッチします。[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\u200c\u200d] と定義されています。 |
\W | \w を除いた文字にマッチします。 |
\x{hhhh} | 十六進数 hhhh の文字にマッチします。1-6 桁の十六進数文字が指定できます。 |
\xhh | 二桁の十六進数 hh の文字にマッチします。 |
\X | Grapheme Cluster [4] にマッチします。 |
\Z | 入力の終端位置にマッチします。最後に行端文字がある場合はその直前にマッチします。 |
\z | 入力の終端位置にマッチします。 |
\n | 後方参照。n 番目にマッチしたグループにマッチします。n は 1 < n < グループ数でなければいけません。n には数値を指定します。 |
\0ooo | 八進数で指定した文字にマッチします。'ooo' は 1-3 桁の八進数文字で 0377 が最大値になります。最初のゼロは後方参照と区別するために省略不可です。 |
[パターン] | パターンのうちのどれか一文字にマッチします。パターンに指定可能な文字については Unicode Set [5] 参照。 |
. | 全ての一文字にマッチします。 |
^ | 行頭にマッチします。 |
$ | 行末にマッチします。 |
\ | 次の文字をエスケープします。* ? + [ ( ) { } ^ $ | \ は文字として取り扱われるようにするにはエスケープしなければいけません。 |
正規表現記号
記号 | 説明 |
---|---|
| | 選択。A|B は A または B にマッチします。 |
* | 0 回以上の繰り返しにマッチします。最長マッチ。 |
+ | 1 回以上の繰り返しにマッチします。最長マッチ。 |
? | 0 回または 1 回の繰り返しにマッチします。1 回の繰り返しが優先されます。 |
{n} | n 回の繰り返しにマッチします。 |
{n,} | n 回以上の繰り返しにマッチします。最長マッチ。 |
{n,m} | n 回以上、m 回以下の繰り返しにマッチします。最長マッチを試みますが、m 回を超えません。 |
*? | 0 回以上の繰り返しにマッチします。最短マッチ。 |
+? | 1 回以上の繰り返しにマッチします。最短マッチ。 |
?? | 0 回または 1 回の繰り返しにマッチします。0 回の繰り返しが優先されます。 |
{n}? | n 回の繰り返しにマッチします。 |
{n,}? | n 回以上の繰り返しにマッチします。最短マッチ。 |
{n,m}? | n 回以上、m 回以下の繰り返しにマッチします。最短マッチ。 |
*+ | 0 回以上の繰り返しにマッチします。最初にマッチしたときにできるだけ長くマッチしようとしますが、全体がマッチしなくても再度マッチを行いません (独占的マッチ)。 |
++ | 1 回以上の繰り返しにマッチします。独占的マッチ。 |
?+ | 0 回以上の繰り返しにマッチします。独占的マッチ。 |
{n}+ | n 回の繰り返しにマッチします。 |
{n,}+ | n 回以上の繰り返しにマッチします。独占的マッチ。 |
{n,m}+ | n 回以上、m 回以下の繰り返しにマッチします。独占的マッチ。 |
( ... ) | 捕捉のためのカッコ。カッコ内のサブパターンはマッチ後に後方参照できます。 |
(?: ...) | 非捕捉のためのカッコ。パターンをグループ化しますが、マッチしても後方参照が生成されません。捕捉のカッコよりも多少効率が良い。 |
(?> ...) | アトミックマッチのためのカッコ。カッコ内のサブパターンが一度だけマッチ判定されます。 |
(?# ...) | コメント。(?# コメント)。 |
(?= ...) | 先読み。現在の位置でカッコ内のパターンがマッチしたときに真です。入力位置を進めません。 |
(?! ...) | 否定先読み。現在の位置でカッコ内のパターンがマッチしなかったときに真です。入力位置を進めません。 |
(?<= ...) | 戻り読み。カッコ内のパターンが現在の位置のテキストの直前にマッチするとき真。入力位置を変更しません。戻り読みパターンでマッチ可能な文字列長は無制限ではいけません (* または + を指定できません)。 |
(?<! ...) | 否定戻り読み。カッコ内のパターンが現在の位置のテキストの直前にマッチしないとき真。入力位置を変更しません。戻り読みパターンでマッチ可能な文字列長は無制限ではいけません (* または + を指定できません)。 |
(?ismwx-ismwx: ...) | フラグを設定します。カッコ内のパターンを指定したフラグで評価します。有効化、もしくは - で無効化します。 |
(?ismwx-ismwx) | フラグを設定します。フラグ設定を変更します。設定以降の部分に変更が適用されます。たとえば、(?i) では大文字と小文字を区別したマッチに変更します。 |
セット表現
記号 | 説明 |
---|---|
[abc] | a, b または c のどれか一つの文字にマッチします。 |
[^abc] | a, b, c を除く一文字にマッチします。 |
[A-M] | A から M の文字にマッチします。 |
[\u0000-\U0010ffff] | \u0000 から \U0010ffff の文字にマッチします。 |
[[a-z][A-Z][0-9]] [a-zA-Z0-9] |
a から z および A から Z、0 から 9 のどれか一つの文字にマッチします。二つはどちらも同じです。 |
置換テキスト
置換テキストに指定可能な文字。
記号 | 説明 |
---|---|
$n | n 番目に捕捉されたグループのテキストが $n の位置に置換されます。n は 0 <= n < グループ数でなければいけません。$ の次に数値のない場合には特に意味はなく、通常通り $ が表示されます。 |
\ | 次に置かれた記号を文字として認識させて特殊な意味をなくします。このエスケープは $ と \ 記号でのみ必要ですが、他の記号と組み合わせても特に問題はありません。 |
フラグオプション
以下のフラグオプションは正規表現のマッチに関する挙動を指定します。
フラグ | 説明 |
---|---|
i | 大文字と小文字を区別しません。 |
x | 空白文字とコメントを有効にします。 |
s | "." が行末文字とマッチするようになります。デフォルトではマッチしません。CR/LF の組み合わせは一文字として取り扱われ、一つの "." でマッチすることに注意してください。 |
m | "^" と "$" の振る舞いを制御します。デフォルトではそれらの記号はそれぞれ最初と最後にのみマッチします。このフラグを指定すると "^" と "$" は行頭と行末にもマッチするようになります。 |
w | \b の振る舞いを制御します。このフラグを指定すると単語の境界が Unicode UAX 29 Text Boundaries の定義に従います。デフォルトでは単純に "word" と "non-word" 文字の区分により単語の境界が判定されますが、これは伝統的な正規表現の振る舞いに近いものです。このフラグを指定すると、スペースや連続した "non-word" 文字で結果が大きく変わります。 |
旧メタ文字
利用できなくなったもの。主に POSIX 系の正規表現で利用される以下のクラスです。
文字 | 説明 |
---|---|
\> | 単語終端マッチ。内部で \b に置換されますが推奨されません。\b などで代用します。 |
\< | 単語先頭マッチ。内部で \b に置換されますが推奨されません。\W などで代用します。 |
\xXXXX | 文字コードでの文字指定。\x は二桁のみ、それ以上の桁数が必要であれば \x{hhhh} などを利用します。 |
[:alpha:] | アルファベット文字。[a-zA-Z] などを利用。 |
[:digit:] | 一桁の数字。\d や [0-9] などで代用します。 |
[:alnum:] | [:alpha:] と [:digit:]。[a-zA-Z0-9] などで代用。 |
[:space:] | 空白文字。\s などで代用します。 |
[:print:] | 表示可能文字。[\x20-\x7E] |
[:cntrl:] | 非表示可能文字。[\x00-\x1F\x7F] |
[:upper:] | 大文字。[A-Z] などで代用します。 |
[:lower:] | 小文字。[a-z] などで代用します。 |
[1] http://userguide.icu-project.org/strings/regexp
[2] http://userguide.icu-project.org/boundaryanalysis
[3] http://www.fileformat.info/info/unicode/category/Nd/list.htm
[4] http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries
[5] http://userguide.icu-project.org/strings/unicodeset
[6] http://www.fileformat.info/info/unicode/category/index.htm