C++11 正则表达式混淆



我有一个python正则表达式:

As*                      # optional whitespace at the start, then
(?P<sign>[-+]?)            # an optional sign, then
(?=d|.d)                # lookahead for digit or .digit
(?P<num>d*)               # numerator (possibly empty)
(?:                        # followed by
   (?:/(?P<denom>d+))?    # an optional denominator
|                          # or
   (?:.(?P<decimal>d*))? # an optional fractional part
   (?:E(?P<exp>[-+]?d+))? # and optional exponent
)
s*Z                      # and optional whitespace to finish

换句话说,获取以下项的命名组:

  • 有符号/无符号 | 有理数/小数/整数 | 数字 | 带/无指数

但是我对 C++11 正则表达式格式感到困惑?正如我所读到的,支持的格式很少,但我得到了一个正则表达式解析器异常。更多,我读到命名组不支持 C++11 正则表达式。

如何拥有提供等效方案的 C++11 兼容正则表达式?

非常感谢您的帮助。

不能保留命名的捕获组,但可以使用多行字符串文本以详细方式定义模式:

std::string pat = "^\s*"      // optional whitespace at the start, then
        "([-+]?)"              // an optional sign, then
        "(?=\.?\d)"          // lookahead for digit or .digit
        "(\d*)"               // numerator (possibly empty)
        "(?:"                  // followed by
           "(?:/(\d+))?"      // an optional denominator
        "|"                    // or
           "(?:\.(\d*))?"    // an optional fractional part
           "(?:E([-+]?\d+))?" // and optional exponent
        ")"
        "\s*$";               //  and optional whitespace to finish
std::regex e(pat);
std::string s(" -23/34 ");
std::smatch a;
if (std::regex_search(s, a, e))
    std::cout << a[0] << endl;

查看C++演示

相关内容

  • 没有找到相关文章

最新更新