このページの内容

PCRE2の正規表現構文の概要

PCRE2がサポートする正規表現パターンの構文と意味の詳細は、pcre2patternで説明しています。この文書には、パターン構文のクイックリファレンスに続いて、置換関数で使う置換文字列の構文を掲載しています。後者の詳しい説明は、pcre2apiにあります。

リテラルとしての扱い

  \x         xが英数字以外なら、文字xそのもの
  \Q...\E    囲まれた文字をリテラルとして扱う

PCRE2_EXTENDEDを設定して、ほとんどの空白文字を無視する場合でも、\Q...\E内の空白文字は常にリテラルとして扱われます。PCRE2での\Q...\Eの扱いには、Perlと異なる点があることにも注意してください。詳細はpcre2patternを参照してください。

波括弧で囲む項目

1つの例外を除き、\g{2}や\k{name}など、{と}でデータを囲む構文では、{の直後や}の直前にスペースや水平タブを置くことができ、それらは無視されます。量指定子では、コンマの前後にも置けます。例外は\u{...}です。これはPerl互換ではなく、PCRE2_EXTRA_ALT_BSUXを設定した場合にのみ認識されます。この機能はECMAScript互換性のためのもので、ECMAScriptの動作に従います。

エスケープされた文字

この表はASCII環境とUnicode環境に適用されます。認識できないエスケープシーケンスはエラーになります。

  \a         アラーム、すなわちBEL文字(16進07)
  \cx        「control-x」。xは制御文字以外のASCII文字
  \e         エスケープ(16進1B)
  \f         改ページ(16進0C)
  \n         改行(16進0A)
  \r         復帰(16進0D)
  \t         タブ(16進09)
  \0dd       8進コード0ddの文字
  \ddd       8進コードdddの文字、または後方参照
  \o{ddd..}  8進コードddd..の文字
  \N{U+hh..} Unicodeコードポイントhh..の文字(Unicodeモードのみ)
  \xhh       16進コードhhの文字
  \x{hh..}   16進コードhh..の文字

\N{U+hh..}は\x{hh..}と同義ですが、EBCDICコードを使用する環境(主にIBMのメインフレーム)ではサポートされません。\Nの後に開き波括弧がない場合は、別の意味になることに注意してください(後述)。

PCRE2_ALT_BSUXまたはPCRE2_EXTRA_ALT_BSUXを設定した場合(「ALT_BSUXモード」)、次も認識されます。

  \U         文字「U」
  \uhhhh     16進コードhhhhの文字
  \u{hh..}   16進コードhh..の文字。ただしEXTRA_ALT_BSUXの場合のみ

\xの後に{がない場合、1桁または2桁の16進数字を読みます。ただし、ALT_BSUXモードでは、16進エスケープとして認識されるには\xの後に2桁の16進数字が必要で、それ以外は文字「x」そのものに一致します。同様に、ALT_BSUXモードで\uの後に4桁の16進数字がない場合、またはEXTRA_ALT_BSUXモードで波括弧に囲まれた16進数字列がない場合、文字「u」そのものに一致します。

\0ddは常に8進コードであることに注意してください。バックスラッシュの後に0以外の数字がある場合の扱いは複雑です。詳細はpcre2patternの「表示されない文字(Non-printing characters)」の節を参照してください。そこには、EBCDIC環境でのエスケープ処理の詳細も記載されています。

文字型

  .          改行以外の任意の文字。
               dotallモードでは、どの文字でも一致
  \C         UTFモードでも1コード単位(使用を避けるのが望ましい)
  \d         10進数字
  \D         10進数字以外の文字
  \h         水平方向の空白文字
  \H         水平方向の空白文字以外
  \N         改行以外の文字
  \p{xx}     xxプロパティーを持つ文字
  \P{xx}     xxプロパティーを持たない文字
  \R         改行シーケンス
  \s         空白文字
  \S         空白文字以外
  \v         垂直方向の空白文字
  \V         垂直方向の空白文字以外
  \w         「単語」文字
  \W         「単語」文字以外
  \X         Unicodeの拡張書記素クラスター

\Cは、現在の照合位置をUTF-8またはUTF-16の文字の途中に残す可能性があるため、危険です。アプリケーションはPCRE2_NEVER_BACKSLASH_Cオプションを設定して、\Cの使用を禁止できます。\Cを恒久的に無効にしたPCRE2をビルドすることもできます。

既定では、UTF-8モードや16ビット・32ビットのライブラリーでも、\d、\s、\wが一致するのはASCII文字だけです。ただし、ロケールに固有の照合を行っている場合、\sと\wはコードポイントが128〜255の文字にも一致することがあります。PCRE2_UCPオプションを設定すると、これらのエスケープシーケンスはUnicodeプロパティーを使うようになり、さらに多くの文字に一致します。ただし、個々のシーケンスをASCII文字だけへ制限するオプションもあります。

\pと\Pのプロパティー名の指定は、大文字・小文字を区別せずに照合されます。Unicodeの「緩い照合(loose matching)」規則に従い、ハイフン、アンダースコア、ASCIIの空白文字は無視されます。たとえば、\p{Bidi_Class=al}は\p{ bidi class = AL }と同じです。

\pと\Pの一般カテゴリープロパティー

  C          その他
  Cc         制御文字
  Cf         書式文字
  Cn         未割り当て
  Co         私用文字
  Cs         サロゲート

  L          字母(Letter)
  Lc         大小区別のある字母(Cased letter)。Ll、Lu、Ltの和集合
  L&         Lcの同義語
  Ll         小文字
  Lm         修飾字母
  Lo         その他の字母
  Lt         タイトルケースの字母
  Lu         大文字

  M          結合マーク
  Mc         間隔を持つマーク
  Me         囲みマーク
  Mn         間隔を持たないマーク

  N          数
  Nd         10進数字
  Nl         数を表す文字
  No         その他の数

  P          句読点
  Pc         接続句読点
  Pd         ダッシュ句読点
  Pe         閉じ句読点
  Pf         終わりの句読点
  Pi         始まりの句読点
  Po         その他の句読点
  Ps         開き句読点

  S          記号
  Sc         通貨記号
  Sk         修飾記号
  Sm         数学記号
  So         その他の記号

  Z          区切り
  Zl         行区切り
  Zp         段落区切り
  Zs         空白区切り

リリース10.45以降では、大文字・小文字を区別しない照合を設定すると、Ll、Lu、LtはすべてLcと同等になります。

\pと\PのPCRE2固有カテゴリープロパティー

  Xan        英数字: LとNのプロパティーの和集合
  Xps        POSIXの空白: Zプロパティー、またはtab、NL、VT、FF、CR
  Xsp        Perlの空白: Zプロパティー、またはtab、NL、VT、FF、CR
  Xuc        普遍文字名で表せる文字(Universal Character Name)
  Xwd        Perlの単語文字: Xanプロパティー、またはアンダースコア

現在、Perlの空白とPOSIXの空白は同じです。Perlはリリース5.18で空白文字集合にVTを追加しました。

\pと\Pの二値プロパティー

Unicodeは、値が真または偽だけである二値プロパティーをいくつも定義しています。\pと\Pが認識するものの一覧と略称は、次のコマンドを実行すると取得できます。

  pcre2test -LP

\pと\Pによるスクリプトの照合

多くのスクリプト名とその4文字の略称は、\p{sc:...}や\p{scx:...}の項目で、または\pの中にスクリプト名だけを指定して(もちろん\Pでも)認識されます。これらのスクリプトの一覧は、次のコマンドを実行すると取得できます。

  pcre2test -LS

\pと\PのBIDI_CLASSプロパティー

  \p{Bidi_Class:<class>}   指定したクラスの文字に一致
  \p{BC:<class>}           指定したクラスの文字に一致

認識されるクラスは、次のとおりです。

  AL          アラビア文字
  AN          アラビア数字
  B           段落区切り
  BN          境界の中立文字
  CS          共通区切り
  EN          欧州数字
  ES          欧州数字の区切り
  ET          欧州数字の終端子
  FSI         最初の強い方向に従う分離
  L           左から右
  LRE         左から右への埋め込み
  LRI         左から右への分離
  LRO         左から右への上書き
  NSM         間隔を持たないマーク
  ON          その他の中立文字
  PDF         方向書式の解除
  PDI         方向分離の解除
  R           右から左
  RLE         右から左への埋め込み
  RLI         右から左への分離
  RLO         右から左への上書き
  S           区間区切り
  WS          空白

文字クラス

  [...]       肯定の文字クラス
  [^...]      否定の文字クラス
  [x-y]       範囲(16進文字にも使用可能)
  [[:xxx:]]   肯定のPOSIX名前付き集合
  [[:^xxx:]]  否定のPOSIX名前付き集合

  alnum       字母と数字(alphanumeric)
  alpha       字母(alphabetic)
  ascii       0〜127
  blank       スペースまたはタブ
  cntrl       制御文字
  digit       10進数字
  graph       印字可能文字(スペースを除く)
  lower       小文字
  print       印字可能文字(スペースを含む)
  punct       印字可能文字(字母と数字を除く)
  space       空白文字
  upper       大文字
  word        \wと同じ
  xdigit      16進数字

PCRE2では、POSIX文字集合名は既定でASCII文字だけを認識します。ただし、PCRE2_UCPを設定すると、一部の集合はUnicodeプロパティーを使います。文字クラスの中でも\Q...\Eを使用できます。

PCRE2_ALT_EXTENDED_CLASSを設定すると、UTS#18の拡張文字クラスを使用できます。これにより、文字クラスを入れ子にし、集合演算子で組み合わせられます。

  [x&&[^y]]   UTS#18の拡張文字クラス

  x||y        集合の和(OR)
  x&&y        集合の積(AND)
  x--y        集合の差(AND NOT)
  x~~y        集合の対称差(XOR)

Perlの拡張文字クラス

  (?[...])                Perlの拡張文字クラス
  (?[\p{Thai} & \p{Nd}])  演算子。空白文字は無視
  (?[(x - y) & z])        グループ化の括弧

  (?[ [^3] & \p{Nd} ])    [...]は入れ子の通常の文字クラス
  (?[ [:alpha:] - [z] ])  POSIX集合は[...]の外でも使用可能
  (?[ \d - [3] ])         バックスラッシュでエスケープした集合は[...]の外でも使用可能
  (?[ !\n & [:ascii:] ])  バックスラッシュでエスケープした文字は[...]の外でも使用可能
                      その他すべての文字や範囲は[...]で囲む必要がある

  x|y, x+y                集合の和(OR)
  x&y                     集合の積(AND)
  x-y                     集合の差(AND NOT)
  x^y                     集合の対称差(XOR)
  !x                      集合の補集合(NOT)

Perlの拡張文字クラスの中では、[...]によって、通常の文字クラスとして解釈するモードへ切り替わります。入れ子の[...]の外側では、バックスラッシュエスケープ、POSIX集合、演算子、括弧だけが許可されます。入れ子の通常の文字クラスの内側では、^は通常どおりの意味を持ちます(最初の文字として使用するとクラスを反転します)。入れ子のクラスの外側では、^はXOR演算子です。

量指定子

  ?           0回または1回、貪欲
  ?+          0回または1回、所有的
  ??          0回または1回、非貪欲
  *           0回以上、貪欲
  *+          0回以上、所有的
  *?          0回以上、非貪欲
  +           1回以上、貪欲
  ++          1回以上、所有的
  +?          1回以上、非貪欲
  {n}         ちょうどn回
  {n,m}       n回以上m回以下、貪欲
  {n,m}+      n回以上m回以下、所有的
  {n,m}?      n回以上m回以下、非貪欲
  {n,}        n回以上、貪欲
  {n,}+       n回以上、所有的
  {n,}?       n回以上、非貪欲
  {,m}        0回以上m回以下、貪欲
  {,m}+       0回以上m回以下、所有的
  {,m}?       0回以上m回以下、非貪欲

アンカーと簡単なアサーション

  \b          単語境界
  \B          単語境界ではない位置
  ^           対象文字列の先頭
                複数行モードでは、文字列内部の改行の直後にも一致
                (PCRE2_ALT_CIRCUMFLEXを設定すると、どの改行の直後にも一致)
  \A          対象文字列の先頭
  $           対象文字列の末尾
                対象文字列の末尾の改行の直前にも一致
                複数行モードでは、文字列内部の改行の直前にも一致
  \Z          対象文字列の末尾
                対象文字列の末尾の改行の直前にも一致
  \z          対象文字列の末尾
  \G          対象文字列の最初の照合位置

報告する一致位置の設定

  \K          報告する一致開始位置を設定

リリース10.38以降では、Perlとの互換性のため、先読み・後読みアサーション内の\Kは、既定では許可されません。ただし、PCRE2_EXTRA_ALLOW_LOOKAROUND_BSKオプションを設定すると、以前の動作が再び有効になります。このオプションを設定した場合、肯定アサーションでは\Kが有効になり、否定アサーションでは無視されます。

選択

  expr|expr|expr...

捕捉

  (...)           捕捉グループ
  (?<name>...)    名前付き捕捉グループ(Perl)
  (?'name'...)    名前付き捕捉グループ(Perl)
  (?P<name>...)   名前付き捕捉グループ(Python)
  (?:...)         非捕捉グループ
  (?|...)         非捕捉グループ。各選択肢内の捕捉グループについて
                   グループ番号をリセット

UTF以外のモードでは、名前にアンダースコアとASCIIの英字・数字を含められます。UTFモードでは、Unicodeの任意の字母(letter)とUnicodeの10進数字を使用できます。どちらの場合も、名前を数字で始めることはできません。

アトミックグループ

  (?>...)         アトミックな非捕捉グループ
  (*atomic:...)   アトミックな非捕捉グループ

コメント

  (?#....)        コメント(入れ子不可)

オプション設定

グループ内でのこれらのオプションの変更は、グループの終わりで自動的に取り消されます。

  (?a)            すべてのASCIIオプション
  (?aD)           UCPモードで\dをASCIIに制限
  (?aS)           UCPモードで\sをASCIIに制限
  (?aW)           UCPモードで\wをASCIIに制限
  (?aP)           UCPモードですべてのPOSIXクラスをASCIIに制限
  (?aT)           UCPモードでPOSIXの数字クラスをASCIIに制限
  (?i)            大文字・小文字を区別しない
  (?J)            重複する名前付きグループを許可
  (?m)            複数行モード
  (?n)            自動捕捉をしない
  (?r)            大小無視の照合をASCII同士または非ASCII同士に制限
  (?s)            単一行モード(dotall)
  (?U)            既定で非貪欲
  (?x)            クラスまたは\Q...\E内を除き、空白文字を無視
  (?xx)           (?x)と同様だが、クラス内のスペースとタブも無視
  (?-...)         指定したオプションを解除
  (?^)            imnrsxオプションを解除

(?aP)は(?aT)も暗黙に設定しますが、これによる追加の効果はありません。ただし、(?-aP)も(?-aT)を暗黙に設定し、POSIXクラスに対するASCIIへの制限をすべて解除することになります。

xまたはxxを解除すると、両方とも解除されます。複数のオプションを同時に設定できます。また、(?i-x)のように設定と解除を混在させることもできますが、ハイフンは1つだけです。(?^の後には設定を指定できますが、解除は指定できません。たとえば(?^in)です。オプション設定は、非捕捉グループの先頭にも置けます。たとえば(?i:...)です。

次の指定は、パターンの最初、または改行規約・\Rのシーケンスや同様の構文のオプションの後でのみ認識されます。複数を指定できます。最初の3つでは、dは10進数です。

  (*LIMIT_DEPTH=d)     バックトラッキングの上限をdに設定
  (*LIMIT_HEAP=d)      ヒープサイズの上限をd * 1024バイトに設定
  (*LIMIT_MATCH=d)     照合の上限をdに設定
  (*CASELESS_RESTRICT) 照合時にPCRE2_EXTRA_CASELESS_RESTRICTを設定
  (*NOTEMPTY)          照合時にPCRE2_NOTEMPTYを設定
  (*NOTEMPTY_ATSTART)  照合時にPCRE2_NOTEMPTY_ATSTARTを設定
  (*NO_AUTO_POSSESS)   自動所有的量指定子化をしない(PCRE2_NO_AUTO_POSSESS)
  (*NO_DOTSTAR_ANCHOR) .*による位置の固定をしない(PCRE2_NO_DOTSTAR_ANCHOR)
  (*NO_JIT)            JIT最適化を無効にする
  (*NO_START_OPT)      照合開始位置の最適化をしない(PCRE2_NO_START_OPTIMIZE)
  (*TURKISH_CASING)    照合時にPCRE2_EXTRA_TURKISH_CASINGを設定
  (*UTF)               使用するライブラリーに適したUTFモードを設定
  (*UCP)               PCRE2_UCPを設定(\dなどにUnicodeプロパティーを使用)

LIMIT_DEPTH、LIMIT_HEAP、LIMIT_MATCHは、pcre2_match()またはpcre2_dfa_match()の呼び出し側が設定した上限を引き下げることしかできず、引き上げることはできません。LIMIT_RECURSIONは、LIMIT_DEPTHの旧式の同義語です。アプリケーションは、コンパイル時にそれぞれPCRE2_NEVER_UTF、PCRE2_NEVER_UCPオプションを設定することで、(*UTF)と(*UCP)の使用を禁止できます。

改行規約

次の指定は、パターンの最初、または同様の構文のオプション設定の後でのみ認識されます。

  (*CR)           復帰のみ
  (*LF)           改行のみ
  (*CRLF)         復帰に続く改行
  (*ANYCRLF)      上記3つすべて
  (*ANY)          Unicodeの任意の改行シーケンス
  (*NUL)          NUL文字(バイナリーのゼロ)

\Rが一致するもの

次の指定は、パターンの最初、または同様の構文のオプション設定の後でのみ認識されます。

  (*BSR_ANYCRLF)  CR、LF、CRLF
  (*BSR_UNICODE)  Unicodeの任意の改行シーケンス

先読み・後読みアサーション

  (?=...)                     )
  (*pla:...)                  ) 肯定先読み
  (*positive_lookahead:...)   )

  (?!...)                     )
  (*nla:...)                  ) 否定先読み
  (*negative_lookahead:...)   )

  (?<=...)                    )
  (*plb:...)                  ) 肯定後読み
  (*positive_lookbehind:...)  )

  (?<!...)                    )
  (*nlb:...)                  ) 否定後読み
  (*negative_lookbehind:...)  )

後読みの最上位の各分岐には、一致する文字数の上限が必要です。文字数が可変の分岐が1つでもある場合、各分岐の最大値は、pcre2_compile()の呼び出し側が設定する値、または既定値によって制限されます。既定値はPCRE2のビルド時に設定されます(最終的な既定値は255です)。すべての分岐が固定個数の文字に一致する場合、各分岐の上限は65535文字です。

非アトミックな先読み・後読みアサーション

これらのアサーションはPCRE2固有であり、Perl互換ではありません。

  (?*...)                                )
  (*napla:...)                           ) 同義の構文
  (*non_atomic_positive_lookahead:...)   )

  (?<*...)                               )
  (*naplb:...)                           ) 同義の構文
  (*non_atomic_positive_lookbehind:...)  )

部分文字列走査アサーション

この機能はPerl互換ではありません。

  (*scan_substring:(grouplist)...)  捕捉した部分文字列を走査
  (*scs:(grouplist)...)             捕捉した部分文字列を走査

コンマで区切る「grouplist」は、次のいずれかの方法でグループを指定できます。

  n       絶対参照
  +n      相対参照
  -n      相対参照
  <name>  名前
  'name'  名前

スクリプトラン

  (*script_run:...)           ) バックトラッキングで戻れるスクリプトラン
  (*sr:...)                   )

  (*atomic_script_run:...)    ) アトミックなスクリプトラン
  (*asr:...)                  )

後方参照

  \n              番号による参照(曖昧になる場合がある)
  \gn             番号による参照
  \g{n}           番号による参照
  \g+n            番号による相対参照(PCRE2拡張)
  \g-n            番号による相対参照
  \g{+n}          番号による相対参照(PCRE2拡張)
  \g{-n}          番号による相対参照
  \k<name>        名前による参照(Perl)
  \k'name'        名前による参照(Perl)
  \g{name}        名前による参照(Perl)
  \k{name}        名前による参照(.NET)
  (?P=name)       名前による参照(Python)

サブルーチン参照(再帰も可能)

  (?R)            パターン全体を再帰的に呼び出す
  (?n)            絶対番号でサブルーチンを呼び出す
  (?+n)           相対番号でサブルーチンを呼び出す
  (?-n)           相対番号でサブルーチンを呼び出す
  (?&name)        名前でサブルーチンを呼び出す(Perl)
  (?P>name)       名前でサブルーチンを呼び出す(Python)
  \g<name>        名前でサブルーチンを呼び出す(Oniguruma)
  \g'name'        名前でサブルーチンを呼び出す(Oniguruma)
  \g<n>           絶対番号でサブルーチンを呼び出す(Oniguruma)
  \g'n'           絶対番号でサブルーチンを呼び出す(Oniguruma)
  \g<+n>          相対番号でサブルーチンを呼び出す(PCRE2拡張)
  \g'+n'          相対番号でサブルーチンを呼び出す(PCRE2拡張)
  \g<-n>          相対番号でサブルーチンを呼び出す(PCRE2拡張)
  \g'-n'          相対番号でサブルーチンを呼び出す(PCRE2拡張)

括弧を使う形式(?...)では、返す捕捉グループの一覧も指定できます。これらのグループが再帰の間に設定された場合、その内容は呼び出し側の部分式で保持されます(この機能はPerlではサポートされません)。

  (?R(grouplist))       捕捉グループを返し、パターン全体を再帰的に呼び出す
                          (PCRE2拡張)
  (?n(grouplist))       )
  (?+n(grouplist))      ) 捕捉グループを返し、サブルーチンを呼び出す
  (?-n(grouplist))      )   (PCRE2拡張)
  (?&name(grouplist))   )
  (?P>name(grouplist))  )

コンマで区切る「grouplist」は、(*scan_substring:(grouplist)...)と同じ構文を使い、次のいずれかの方法でグループを指定できます。

  n       絶対参照
  +n      相対参照
  -n      相対参照
  <name>  名前
  'name'  名前

条件付きパターン

  (?(condition)yes-pattern)
  (?(condition)yes-pattern|no-pattern)

  (?(n)                絶対参照の条件
  (?(+n)               相対参照の条件(PCRE2拡張)
  (?(-n)               相対参照の条件(PCRE2拡張)
  (?(<name>)           名前付き参照の条件(Perl)
  (?('name')           名前付き参照の条件(Perl)
  (?(name)             名前付き参照の条件(PCRE2、非推奨)
  (?(R)                全体の再帰の条件
  (?(Rn)               特定の番号付きグループの再帰の条件
  (?(R&name)           特定の名前付きグループの再帰の条件
  (?(DEFINE)           参照用のグループを定義
  (?(VERSION[>]=n[.m]) PCRE2のバージョンを検査
  (?(assert)           アサーションの条件

(?(R)と(?(Rn)は、名前付き参照の条件にも再帰の検査にもなり得るため、曖昧であることに注意してください。対応する名前付きグループが存在する場合、その条件は参照条件として解釈されます。

VERSION条件の構文で角括弧に囲まれた部分は、省略できます。その場合、バージョン番号の小数部分の既定値は0になります。

バックトラッキング制御

すべてのバックトラッキング制御動詞は、(*VERB:NAME)という形式にできます。(*MARK)では名前が必須ですが、その他では省略可能です。(*SKIP)は、:NAMEがあると動作が変わります。その他の動詞は、呼び出し側へ返す名前を設定するだけで、その名前を(*SKIP)から参照することはできません。次の動詞は、そこへ到達した直後に作用します。

  (*ACCEPT)       強制的に照合を成功させる
  (*FAIL)         強制的にバックトラッキングする。同義語は(*F)
  (*MARK:NAME)    呼び出し側へ返す名前を設定。同義語は(*:NAME)

次の動詞は、その後の照合失敗によるバックトラッキングがそこへ到達した場合にのみ作用します。いずれも強制的に照合を失敗させますが、その後の処理が異なります。照合開始位置を先へ進めるものは、パターンの位置が固定されていない場合にのみ、その処理を行います。

  (*COMMIT)       全体を失敗させ、開始位置を先へ進めない
  (*PRUNE)        次の開始文字へ進む
  (*SKIP)         現在の照合位置へ進む
  (*SKIP:NAME)    先行する(*MARK:NAME)に対応する位置へ進む。
                  見つからなければ、その(*SKIP)は無視される
  (*THEN)         局所的に失敗し、次の選択肢へバックトラッキングする

サブルーチンとして呼び出されたグループの中でこれらの動詞を使うと、その効果はそのサブルーチン呼び出しに限定されます。

コールアウト

  (?C)            コールアウト(番号は0と見なす)
  (?Cn)           数値データnを持つコールアウト
  (?C"text")      文字列データを持つコールアウト

文字列の区切り文字には、`、'、"、^、%、#、$(開始と終了は同じ文字)を使用できます。また、開始の{と、それに対応する終了の}も使用できます。文字列内に終了の区切り文字を含めるには、その文字を2つ重ねます。

置換文字列

PCRE2_SUBSTITUTE_LITERALオプションを設定すると、pcre2_substitute()の置換文字列は解釈されません。そうでない場合、既定では、次の形式で使われるドル記号だけが特別な文字になります。

  $$                  ドル記号を挿入
  $n または ${n}      グループnの内容を挿入
  $<name>             名前付きグループの内容を挿入
  $0 または $&        一致した部分文字列全体を挿入
  $`                  一致した部分より前の部分文字列を挿入
  $'                  一致した部分より後の部分文字列を挿入
  $_                  入力文字列全体を挿入
  $+                  一致した捕捉グループのうち最大の番号のものを挿入
  $*MARK または ${*MARK}  制御動詞の名前を挿入

${n}のnには、名前または番号を指定できます。PCRE2_SUBSTITUTE_EXTENDEDを設定すると、追加の解釈が行われます。

1. バックスラッシュはエスケープ文字になり、前述の「エスケープされた文字」で説明した形式が認識されます。さらに、次も認識されます。

  \Q...\E 解釈を抑制するために使用できる
  \l      次の文字を小文字にする
  \u      次の文字を大文字にする
  \L      後続の文字を小文字にする
  \U      後続の文字を大文字にする
  \u\L    次の文字を大文字にし、その後はすべて小文字にする
  \l\U    次の文字を小文字にし、その後はすべて大文字にする
  \E      \Lまたは\Uによる大小変換を終了する
  \b      バックスペース文字(パターン内の文字クラスと同じ)
  \v      垂直タブ文字(パターン内の意味とは異なる)

2. Python形式の\g<n>も、グループの内容を挿入する別の方法として認識されます。山括弧は構文の一部で、nはグループ名または番号です。たとえば\g<3>です。

3. 捕捉グループの置換では、さらに次の形式をサポートします。

  ${n:-string}             未設定グループの既定値
  ${n:+string1:string2}    設定済み/未設定グループに対する値

置換文字列自体も展開されます。バックスラッシュで、コロンと閉じ波括弧をエスケープできます。

関連項目

pcre2pattern(3)、pcre2api(3)、pcre2callout(3)、pcre2matching(3)、pcre2(3)。

著者

Philip Hazel
University Computing Serviceを退職
英国ケンブリッジ。

改訂

最終更新日: 2025年10月14日
Copyright © 1997-2024 University of Cambridge.