置換テキストチュートリアル |
導入 |
文字 |
非印字文字 |
一致するテキスト |
逆参照 |
一致コンテキスト |
大文字と小文字の変換 |
条件付き |
このサイトの詳細 |
導入 |
正規表現クイックスタート |
正規表現チュートリアル |
置換文字列チュートリアル |
アプリケーションと言語 |
正規表現の例 |
正規表現リファレンス |
置換文字列リファレンス |
書籍レビュー |
印刷可能なPDF |
このサイトについて |
RSSフィード&ブログ |
置換文字条件付きを使用すると、特定のキャプチャグループが一致に参加した場合は1つの置換が、キャプチャグループが一致に参加しなかった場合は別の置換を使用できます。これらはJGsoft V2、Boost、およびPCRE2によってサポートされています。BoostとPCRE2はそれぞれ独自の構文を発明しました。JGsoft V2は両方をサポートしています。
Boostで条件付きが機能するには、次のものを渡す必要があります。regex_constants::format_allにregex_replace。PCRE2で機能させるには、PCRE2_SUBSTITUTE_EXTENDEDをpcre2_substitute.
Boost置換文字条件付きBoostの構文は次のとおりです。(?1一致:不一致)1ここでは数字のキャプチャグループを参照する1~99の数字です。一致は、キャプチャグループが参加した一致に対する置換として使用されます。不一致:は、グループが参加しなかった一致に使用されます。コロンは数字のキャプチャグループを参照する1~99の数字です。は2つの部分を区切ります。でリテラルコロンが必要な場合は、
でバックスラッシュでエスケープする必要があります。条件付きのどこかにリテラルの右かっこが必要な場合は、それもバックスラッシュでエスケープする必要があります。括弧は、条件付きを置換文字列の残りから区切ります。開始(?1一致:不一致)終了を、グループが参加した場合は次のように置換します。startmatchedfinishグループが参加しなかった場合は次のように置換します。startunmatchedfinishJGsoft V2には括弧が必要です。Boostでは、置換で条件付きの後に何も来ない場合は括弧を省略できます。したがって?1一致:不一致Boostの構文は次のとおりです。.
は次と同じです。は数字のキャプチャグループを参照する1~99の数字です。とは、キャプチャグループが参加した一致に対する置換として使用されます。の部分は空白にすることができます。のは、キャプチャグループが参加した一致に対する置換として使用されます。の部分が空白の場合は、コロンを省略できます。したがって(?1一致:)と(?1一致)を、グループが参加した場合は次のように置換します。は数字のキャプチャグループを参照する1~99の数字です。グループが参加しなかった場合、一致を空に置換します。
で完全な置換文字列構文を使用できます。は数字のキャプチャグループを参照する1~99の数字です。とは、キャプチャグループが参加した一致に対する置換として使用されます。つまり、他の条件付きの中に条件付きをネストできます。したがって(?11つ(?22つ):(?22つ:なし))開始(?1一致:不一致)終了onetwo両方のグループが参加した場合に置換し、oneまたはtwo一方のグループ 1 または 2 のみ参加し、もう一方が参加しない場合、およびどちらのグループも参加しない場合。Boost の場合には?11 つ目(?22 つ目):?22 つ目:なし
まったく同じ動作ですが、不要な括弧は省きます。JGsoft V2 正規表現フレーバーは、存在しないキャプチャグループを参照する条件式をエラーとして扱います。疑問符の後に 2 つの桁がありますが、2 桁の条件式を有効にするのに十分なキャプチャグループがない場合は、最初の桁のみが条件に使用され、2 番目の桁はリテラルになります。したがって、正規表現に 12 個未満のキャプチャグループがある場合、開始(?1一致:不一致)終了(?12一致)2一致
キャプチャグループ 1 が一致に参加している場合。Boost は、存在しないグループ番号を参照する条件式を、一致に参加しないグループに対する条件式として扱います。したがって(?12twelve:not twelve)は常に置き換えられてnot twelve
となり、正規表現内に 12 個未満のキャプチャグループがあります。(?{1}1:0)開始(?1一致:不一致)終了11 桁条件と 2 桁条件の曖昧さを回避するには、番号を中括弧で囲みます。0正規表現に 11 個以上のキャプチャグループがある場合でも、グループ 1 が参加している場合、および参加していない場合。(?{12}twelve:not twelve)
は、正規表現内に 12 個未満のグループがある場合でも (条件が無効になる場合がある) 常にグループ 12 を参照する条件です。中括弧を使用した構文を使うと、名前付きキャプチャグループも名前で参照できます。開始(?1一致:不一致)終了は数字のキャプチャグループを参照する1~99の数字です。(?{name}matched:unmatched)は、キャプチャグループが参加した一致に対する置換として使用されます。グループ「name」が一致に参加するときに、および参加していないときに使用します。グループが存在しない場合、JGsoft V2 正規表現フレーバーは条件をエラーとして扱います。一方、Boost は、存在しないグループ名を参照する条件をリテラルとして扱います。したがって(?{nonexisting}matched:unmatched)?{nonexisting}matched:unmatchedをリテラル置換として使用します。
PCRE2 の構文は次のとおりです。${1:+matched:unmatched}(?1一致:不一致)1は、番号付きのキャプチャグループを参照する 1 ~ 99 の数値です。正規表現に名前付きキャプチャグループが含まれている場合は、名前で条件で参照できます。${name:+matched:unmatched}.
は数字のキャプチャグループを参照する1~99の数字です。一致は、キャプチャグループが参加した一致に対する置換として使用されます。は、グループが参加しなかった一致に使用します。:+は、グループ番号または名前を条件の最初の部分から区切ります。2 番目のコロンは、2 つの部分区切ります。は数字のキャプチャグループを参照する1~99の数字です。部分でリテラルコロンを使用する場合は、バックスラッシュでエスケープする必要があります。条件内で任意の場所でリテラル右中括弧を使用する場合は、それもバックスラッシュでエスケープする必要があります。プラス記号は:+条件を開始する以外に特別な意味を持たないので、エスケープする必要はありません。
で完全な置換文字列構文を使用できます。は数字のキャプチャグループを参照する1~99の数字です。とは、キャプチャグループが参加した一致に対する置換として使用されます。つまり、他の条件付きの中に条件付きをネストできます。したがって${1:+one${2:+two}:${2:+two:none}}開始(?1一致:不一致)終了onetwo両方のグループが参加した場合に置換し、oneまたはtwo一方のグループ 1 または 2 のみ参加し、もう一方が参加しない場合、およびどちらのグループも参加しない場合
${1:-一致なし}と${name:-一致なし}の省略形は次のとおりです。${1:+${1}:一致なし}と${name:+${name}:一致なし}これらはグループによってキャプチャされたテキストを、グループが照合に参加した場合に挿入します。グループが参加しなかった場合はは、キャプチャグループが参加した一致に対する置換として使用されます。を挿入します。この構文を使用する場合、:-とするとグループの番号または名前を条件の内容から区切ることができます。条件にはコロンとマイナス記号に特殊な意味がない部分のみが 1 つあります。
PCRE2 と JGsoft V2 の両方は、存在しないキャプチャ グループを参照する条件をエラーとして扱います。
上で説明したように、は数字のキャプチャグループを参照する1~99の数字です。の部分でリテラルとして使用するコロンをエスケープするには、バックスラッシュを使用する必要があります。条件内でリテラルの閉じ括弧(Boost)または波カッコ(PCRE2)も、バックスラッシュでエスケープする必要があります。
条件をサポートする置換文字列フレーバーでは、コロン、括弧、波かっこ、さらには疑問符をバックスラッシュでエスケープして、置換文字列内のどこでもリテラルとして解釈されるようにすることができます。ただし、通常は必要ありません。
コロンはは、キャプチャグループが参加した一致に対する置換として使用されます。の部分または条件の外では特別な意味を持ちません。したがって、そこでエスケープする必要はありません。疑問符の後に数字や波カッコが続かない場合、疑問符は特別な意味を持ちません。PCRE2 では、疑問符は特別な意味を持ちません。したがって、Boost または JGsoft V2 で置換としてリテラルの疑問符の後にリテラルの数字または波カッコを使用する場合にのみ、疑問符をバックスラッシュでエスケープする必要があります。
JGsoft V2 フレーバーでは、開き括弧は条件の構文の一部です。その後には、エスケープされていない最初の閉じ括弧が続き、条件が終了します。他のすべてのエスケープされていない開き括弧と閉じ括弧はリテラルです。
Boost は常に括弧を使用してグループ化します。エスケープされていない開き括弧は常にグループを開きます。グループはネストできます。エスケープされていない閉じ括弧は常にグループを閉じます。一致する開き括弧がないエスケープされていない閉じ括弧は、実際には置換文字列を打ち切ります。そのため、Boost ではリテラルの括弧を常にバックスラッシュでエスケープする必要があります。
| クイック スタート | チュートリアル | ツールと言語 | 例 | リファレンス | 書籍レビュー |
| はじめに | 文字 | 印刷できない文字 | 一致したテキスト | 逆参照 | 照合コンテキスト | 大文字小文字の変換 | 条件 |
ページ URL: https://regular-expressions.dokyumento.jp/replaceconditional.html
最終更新日: 2021 年 8 月 12 日
最終更新日: 2024 年 3 月 15 日
著作権 © 2003-2024 Jan Goyvaerts. すべての権利を留保します。