C++ C++';s std::regex有一个与Python';多行?

C++ C++';s std::regex有一个与Python';多行?,c++,regex,C++,Regex,我想使用^和$分别匹配行首和行尾的字符串。例如: std::string multiline = "fifth\nsixth\nseventh\neighth\nninth"; std::cout << regex_search(multiline, std::regex("^s")) << endl; std::string multiline=“fifth\nsexth\nseventh\neighth\nninth”; std::cout目前,这是规范的一个问题,

我想使用
^
$
分别匹配行首和行尾的字符串。例如:

std::string multiline = "fifth\nsixth\nseventh\neighth\nninth";
std::cout << regex_search(multiline, std::regex("^s")) << endl;
std::string multiline=“fifth\nsexth\nseventh\neighth\nninth”;

std::cout目前,这是规范的一个问题,如中所述

摘要,目前在C++ ReEX中没有可移植的方式来实现多行模式。 2343。ECMA-262 RegExp对象的多行属性值真的为假吗?

下面的“Multiline”是ECMA-262 RegExp对象的Multiline属性的值

在ECMA-262中,有一些与多行相关的定义:

  • ECMA-262 15.10.2.6:

    • 如果
      多行
      为真,
      ^
      将在
      行终止符
      之后匹配

    • 如果
      多行
      为false,
      ^
      行终止符
      之后不匹配

    • 如果
      多行
      为真,
      $
      将在
      行终止符
      之前匹配

    • 如果
      多行
      为false,
      $
      行终止符
      前一行不匹配

  • ECMA-262 15.10.4.1、15.10.7.4:

    • 默认情况下,
      Multiline
      false
因此,C++11标准说,
多行
。由于它是
false
^
只匹配字符串的开头,而
$
只匹配字符串的结尾

然而,在28.5.2[re.matchflag]表139中定义了两个标志:

  • match\u not\u bol
    :正则表达式中的字符
    ^
    不应匹配[first,first]

  • match\u not\u eol
    :正则表达式中的字符
    $
    不应与[last,last]匹配

由于
多行
为false,因此
匹配\u not \u bol
匹配\u not \u eol
没有意义,因为它们只会使
^
$
不匹配

在我看来,
Multiline
应该是
true

供参考,
多行
现有实施如下:

Multiline=false

  • libstdc++r206594
  • libc++r199174
Multiline=true

  • Visual Studio Express 2013
  • 增加1.55

阅读有关cppreference的更多信息。

其他语法是否有多行选项?我已经使用它们有一段时间了,但无法让它们工作。例如,
echo“first[当我发布此命令时不会显示的换行符];grep“^s”
在命令行上生成
second
,但
regex\u搜索(多行,std::regex(“^s”,std::regex::grep))
返回false。@徽标:检查BRE和ERE的文档,似乎没有任何多行选项。其他风格(ECMAScript除外)它们大多基于BRE和ERE,因此它们的行为应该不会有什么不同。很可能您必须将输入字符串标记为单独的行并应用正则表达式。