Namespaces
Variants

std::regex_constants:: syntax_option_type

From cppreference.net
定義済みヘッダ <regex>
using syntax_option_type = /* implementation-defined */ ;
(1) (C++11以降)
constexpr syntax_option_type icase = /* unspecified */ ;

constexpr syntax_option_type nosubs = /* unspecified */ ;
constexpr syntax_option_type optimize = /* unspecified */ ;
constexpr syntax_option_type collate = /* unspecified */ ;
constexpr syntax_option_type ECMAScript = /* unspecified */ ;
constexpr syntax_option_type basic = /* unspecified */ ;
constexpr syntax_option_type extended = /* unspecified */ ;
constexpr syntax_option_type awk = /* unspecified */ ;
constexpr syntax_option_type grep = /* unspecified */ ;

constexpr syntax_option_type egrep = /* unspecified */ ;
(2) (C++11以降)
(C++17以降インライン)
inline constexpr syntax_option_type multiline = /* unspecified */ ;
(3) (C++17以降)
1) syntax_option_type は、正規表現の動作方法を制御するオプションを含む BitmaskType です。
2,3) (1) の取り得る値( icase optimize など)は std::basic_regex 内部で重複定義されています。

目次

変更点: - "Contents" → "目次" - その他のテキスト(Constants、Notes、Example、Defect reports、See also)はC++関連の専門用語として翻訳せずに保持 - HTMLタグ、属性、構造は完全に保持 - 書式設定はすべて維持

定数

文法オプション 効果
ECMAScript 修正ECMAScript正規表現文法 を使用します。
basic 基本POSIX正規表現文法を使用します( 文法ドキュメント )。
extended 拡張POSIX正規表現文法を使用します( 文法ドキュメント )。
awk POSIXにおける awk ユーティリティで使用される正規表現文法を使用します( 文法ドキュメント )。
grep POSIXにおける grep ユーティリティで使用される正規表現文法を使用します。これは実質的に basic オプションと同じですが、改行 ' \n ' が選択肢区切りとして追加されています。
egrep POSIXにおける grep ユーティリティで -E オプションを使用した場合の正規表現文法を使用します。これは実質的に extended オプションと同じですが、 '|' に加えて改行 ' \n ' も選択肢区切りとして追加されています。
文法バリエーション 効果
icase 大文字小文字を区別せずに文字マッチングを実行します。
nosubs マッチング実行時、すべてのマークされた部分式 ( expr ) は非マーク部分式 (?: expr ) として扱われます。提供された std::regex_match 構造体にはマッチが保存されず、 mark_count() はゼロになります。
optimize 正規表現エンジンにマッチングを高速化するよう指示しますが、構築が遅くなる可能性があります。例えば、非決定性有限状態オートマトンを決定性有限状態オートマトンに変換することが含まれます。
collate "[a-b]" 形式の文字範囲がロケール依存になります。
multiline (C++17) ECMAScriptエンジンが選択されている場合、 ^ が行の先頭にマッチし、 $ が行の末尾にマッチすることを指定します。

文法オプションは ECMAScript basic extended awk grep egrep の中から最大1つを選択できます。文法が指定されない場合、 ECMAScript が選択されているものと見なされます。他のオプションはバリエーションとして機能し、 std:: regex ( "meow" , std :: regex :: icase ) std:: regex ( "meow" , std :: regex :: ECMAScript | std :: regex :: icase ) と等価です。

注記

POSIXは「最長一致」のマッチングルール(最も長く一致する部分列がマッチされ、そのような部分列が複数ある場合は最初のものがマッチされる)を使用するため、例えばマークアップ言語の解析には適していません:POSIX正規表現 "<tag[^>]*>.*</tag>" は、最初の "<tag" から最後の "</tag>" までのすべてをマッチし、その間にあるすべての "</tag>" "<tag>" を含みます。一方、ECMAScriptは非貪欲マッチをサポートしており、ECMAScript正規表現 "<tag[^>]*>.*?</tag>" は最初の閉じタグまでのみマッチします。

ECMAScriptとPOSIX正規表現のマッチングアルゴリズムの違いを示します:

#include <iostream>
#include <regex>
#include <string>
int main()
{
    std::string str = "zzxayyzz";
    std::regex re1(".*(a|xayy)"); // ECMA
    std::regex re2(".*(a|xayy)", std::regex::extended); // POSIX
    std::cout << "Searching for .*(a|xayy) in zzxayyzz:\n";
    std::smatch m;
    std::regex_search(str, m, re1);
    std::cout << "  ECMA (depth first search) match: " << m[0] << '\n';
    std::regex_search(str, m, re2);
    std::cout << "  POSIX (leftmost longest)  match: " << m[0] << '\n';
}

出力:

Searching for .*(a|xayy) in zzxayyzz:
  ECMA (depth first search) match: zzxa
  POSIX (leftmost longest)  match: zzxayy

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 2053 C++11 定数が static として宣言されていた static 指定子を削除

関連項目

正規表現オブジェクト
(クラステンプレート)