C++用の正規表現テンプレートライブラリです。互換の正規表現エンジンを、"std::regex"(C++11で導入された正規表現ライブラリ)とクラス構成が同じになるようにラッピングしたものです。クラスデザインが同じですので、std::regexや、その基となったboost::regexと同じ感覚で扱えます。Unicodeに特化した実装SRELLはUnicodeに特化した正規表現ライブラリです。特別な設定をせずとも既定でUTF-8/UTF-16/UTF-32文字列が扱えます。UTF-16文字列でサロゲートペアの片割れだけにマッチしたり、UTF-8文字列のコードユニットにマッチしたりするようなことがありません。ような範囲指定もできます。(title-case)」なる第3のcaseがある文字でも、icase検索(大文字・小文字を区別しない検索)時にきちんと処理されます。※ちなみにC++11以降のstd::regexは、us-asciiやiso-8859-*のような1文字が固定長の文字コードを前提としています。そのため1文字が可変長であるUTF-8やUTF-16の文字列はうまく扱えません。C++0x(現C++11)にchar16_t/char32_t型が導入されることになった時に、C++の作業部会内でu16stringやu32stringに加えてregexも対応するかどうか議論があったようですが、反対意見が多かったため見送られてそのままになっているようです(追記:その後今に至るまでC++委員会内のどなたもどうにかする気がないようですので、自分で提案を出してみることにしました)。C++11に向けた改訂作業の中でもregexは比較的初期に提案された拡張であったことから、まったくと言って良いほどC++11の新機能に依存していません。そのためC++11より前のコンパイラであっても、C++のテンプレートを正しく解釈するものであればSRELLは利用可能です(動作確認済みコンパイラのうちもっとも古いものはVC++2005です)。includeするだけです。正規表現オブジェクト。結果を納めるオブジェクト。正規表現をコンパイル。printfを使うなら。上は下のどちらかでも良い。iostreamを使うなら。srellの下に置かれています。この点を除けば使い方はstd::regexに準じます。現時点ではまだstd::regexに関する日本語の文書があまりないようですので、さしあたってSRELLを使ううえで必要となりそうな情報を次のページにまとめました。C++11の機能C++11で導入された機能のうち、std::regexが利用することもあるのは以下の3つです。5月現在、SRELLではこれらの使用可否を次のようにして判定しています。char32_t用のtypedefを行う。引数にinitializer_listを渡せるようにする。コンストラクタや代入でmoveを有効にする。#endif#endif実際には該当する機能が使えるにもかかわらず、コンパイラが__cpp_*マクロを設定しないためにC++11の機能が有効にならない場合、SRELLをincludeする前に上記マクロのうち必要なSRELL_CPP11_*を定義しておくと、対応する機能を強制的にオンにすることが出来ます。C++20の機能C++20ではUTF-8専用の型であるchar8_tが導入される予定です。7以降では、コンパイル時に-fchar8_tオプションを付加することでchar8_tを有効にすることが出来ます。指定した時のみ定義されるようです)。2.100より試験的にchar8_tの対応を始めました。9月現在、SRELLではchar8_tおよびstd::u8stringの使用可否を次のようにして判定しています。char8_t対応とstd::u8string対応との両方を行う。char8_t対応のみ行う。#endif#endif実際には対応しているにもかかわらず、コンパイラが__cpp_*マクロを設定しないためにSRELLのchar8_t対応が有効にならない場合、SRELLをincludeする前に上記SRELL_CPP20_CHAR8_ENABLEDマクロを定義しておくと対応する機能を強制的にオンにすることが出来ます。prefix付きの文字リテラルや文字列リテラルはchar型ではなくなります。s(u8"あいう");のようなコードは型の不一致でコンパイルエラーになることにご注意ください。2.200を使ったサンプルコード(srell::u16regexを使用してUTF-16文字列に対する正規表現検索をするもの)からバイナリの生成ができるようです。4.1.2でもビルド可能なようです。RegExp互換の正規表現が使えます。具体的には次の通りです。U+2029の4文字。2019規格の11.3を参照)。パターンコンパイル時にdotallオプションが指定されている時は、前記4文字も含むすべての文字にマッチする([\u{0}-\u{10ffff}]と等価)。dotallオプションフラグはRegExpにES2018/ES9.0で導入された機能です。SRELLではヴァージョン2.000以降で使用可能です。