クイックスタート
チュートリアル
ツール&言語
リファレンス
書評
正規表現ツール
grep
PowerGREP
RegexBuddy
RegexMagic
一般アプリケーション
EditPad Lite
EditPad Pro
言語とライブラリ
Boost
Delphi
GNU (Linux)
Groovy
Java
JavaScript
.NET
PCRE (C/C++)
PCRE2 (C/C++)
Perl
PHP
POSIX
PowerShell
Python
R
Ruby
std::regex
Tcl
VBScript
Visual Basic 6
wxWidgets
XML スキーマ
Xojo
XQuery & XPath
XRegExp
データベース
MySQL
Oracle
PostgreSQL
このサイトについてさらに
はじめに
正規表現クイックスタート
正規表現チュートリアル
置換文字列チュートリアル
アプリケーションと言語
正規表現の例
正規表現リファレンス
置換文字列リファレンス
書評
印刷可能なPDF
このサイトについて
RSSフィード&ブログ
RegexBuddy—The best regex editor and tester for Boost developers!

Boostを使ったC++正規表現

BoostはC++用の無料のソースコードライブラリです。ダウンロードして解凍した後、bootstrapバッチファイルまたはスクリプトを実行し、次にb2 --with-regexを実行してBoostの正規表現ライブラリをコンパイルします。次に、Boostを解凍したフォルダをC++コンパイラのインクルードパスに追加します。stage\libサブフォルダをリンカーのライブラリパスに追加します。その後、#include <boost/regex.hpp>をC++コードに追加して、Boost正規表現を使用できます。

C++Builderを使用する場合は、EmbarcaderoからC++Builderの特定のバージョンに対応するBoostライブラリをダウンロードする必要があります。取得するBoostのバージョンは、C++Builderのバージョンと、Win32をターゲットにしているかWin64をターゲットにしているかによって異なります。XE3からXE8のWin32コンパイラと、C++Builder 10 Seattleから10.1 BerlinのクラシックWin32コンパイラは、すべてBoost 1.39を使用しています。XE3からXE6のWin64コンパイラはBoost 1.50を使用しています。XE7から10.1 BerlinのWin64コンパイラはBoost 1.55を使用しています。C++Builder 10以降の新しいC++11 Win32コンパイラは、Win64コンパイラと同じバージョンのBoostを使用しています。

このウェブサイトでは、Boost 1.38、1.39、および1.42から最新の1.73までを網羅しています。Boost 1.40では、Perl 5.10から借用した多くの新しい正規表現機能が導入されました。しかし、Boost 1.42まで修正されなかった深刻なバグも導入されました。そのため、Boost 1.40と1.41は完全に無視します。クラシックWin32 C++Builderコンパイラはこのバージョンに固定されているため、Boost 1.38と1.39(正規表現機能は同一)についても説明しています。他のコンパイラを使用している場合は、現在の古いバグを回避するために、Boost 1.42以降を使用する必要があります。バックリファレンスの動作が変更されるため、1.47より前のバージョンから1.47以降にアップグレードした場合、一部の正規表現の動作が変わる可能性があるため、1.47以降を使用することをお勧めします。

実際には、ほとんどの場合、BoostのECMAScript構文を使用します。これはデフォルトの構文であり、他の構文よりもはるかに多くの機能を提供します。このウェブサイトのチュートリアルで構文を言及せずにBoostについて説明している場合、記述されている内容はECMAScript構文に適用され、他の構文には適用されない場合があります。他の構文を使用するのは、古いPOSIXコードやUNIXスクリプトから既存の正規表現を再利用する場合だけです。

Boostと正規表現標準

Boostのドキュメントでは、PerlやJavaScriptとの互換性、そしてboost::regexがC++11でstd::regexとして標準化されたことについて説明しています。Visual StudioとC++Builderに含まれるstd::regexのDinkumware実装とboost::regexを比較すると、クラスと関数テンプレートはほぼ同じであることがわかります。C++コンパイラは、boost::regexを使用したコードとstd::regexを使用したコードを同じように喜んでコンパイルします。そのため、このウェブサイトのstd::regexトピックで示されているすべてのコード例は、stdboost.

に置き換えるだけで、Boostでも問題なく動作します。しかし、C++アプリケーションを実行すると、DinkumwareとBoostのどちらが正規表現を解釈しているかで大きな違いが生じる可能性があります。どちらも同じ6つの構文を提供していますが、それらの構文と動作は、2つのライブラリ間で同じではありません。Boostはregex_constants::perlを定義していますが、これはC++11標準の一部ではありません。これは実際には追加の構文ではなく、単にECMAScriptの同義語です。JavaScript実際のJavaScriptと実際のPerlで使用される正規表現フレーバーには大きな違いがあります。したがって、これらを1つのフレーバーまたは構文として扱うライブラリは、どちらにも互換性がないことは明らかです。BoostのECMAScript構文は、実際のJavaScriptとPerlフレーバーの中間であり、Boost固有の機能と特性がいくつか追加されています。DinkumwareのECMAScript構文は実際のJavaScriptにより近いですが、それでも動作に大きな違いがあります。Dinkumwareは、JavaScriptにないPerlの機能を借用していません。

以下の表は、std::regexとBoostのECMAScript構文、および実際のJavaScriptとPerl間の最も重要な違いを強調したものです。いくつかは機能セットの明らかな違いです。しかし、他のものは、予期せず問題を引き起こす可能性のある微妙な動作の違いです。

機能 std::regex Boost JavaScript Perl
ドットが改行に一致する しない デフォルト しない オプション
アンカーが改行に一致する する デフォルト オプション オプション
改行文字 CR、LF CR、LF、FF、NEL、LS、PSCR、LF、LS、PS LF
非参加グループへのバックリファレンス空文字列に一致1.47以降失敗空文字列に一致失敗
空の文字クラス 一致しない 不可能一致しない 不可能
フリースペースモード なし あり なし あり
モード修飾子 なし あり なし あり
所有格量子化子 なし あり なし あり
名前付きキャプチャ なし .NET構文 なし .NET&Python構文
再帰 なし アトミック なし バックトラッキング
サブルーチン なし バックトラッキング なし バックトラッキング
条件式 なし あり なし あり
アトミックグループ なし あり なし あり
アトミックグループはキャプチャグループをバックトラックするn/a なし n/a あり
単語境界の先頭と末尾 なし あり なし なし
標準POSIXクラス あり あり なし あり
1文字のPOSIXクラス なし あり なし なし
機能 std::regex Boost JavaScript Perl

| クイックスタート | チュートリアル | ツール&言語 |  | リファレンス | 書評 |

| grep | PowerGREP | RegexBuddy | RegexMagic |

| EditPad Lite | EditPad Pro |

| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML スキーマ | Xojo | XQuery & XPath | XRegExp |

| MySQL | Oracle | PostgreSQL |