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,因此它们的行为应该不会有什么不同。很可能您必须将输入字符串标记为单独的行并应用正则表达式。