我认为$表示字符串的结尾。然而,下面的代码给出了“testbbbccc”作为结果,这对我来说非常令人惊讶......这意味着 $ 实际上匹配行尾,而不是整个字符串的结尾。
#include <iostream>
#include <regex>
using namespace std;
int main()
{
tr1::regex r("aaa([^]*?)(ogr|$)");
string test("bbbaaatestbbbccc\nddd");
vector<int> captures;
captures.push_back(1);
const std::tr1::sregex_token_iterator end;
for (std::tr1::sregex_token_iterator iter(test.begin(), test.end(), r, captures); iter != end; )
{
string& t1 = iter->str();
iter++;
cout << t1;
}
}
我一直在尝试找到一个“多线”开关(实际上可以在 PCRE 中轻松找到),但没有成功......有人可以指出我正确的方向吗?
问候,
R.P.
由于 tr1 选择了 Boost::Regex,请尝试以下操作:
From 提升::正则表达式 http://www.boost.org/doc/libs/1_45_0/libs/regex/doc/html/boost_regex/syntax/basic_syntax.html
Anchors:
'^' 字符应与开头匹配
用作第一条线时的线
表达式的特征,或者
子表达式的第一个字符。
'$' 字符应匹配结尾
用作最后一个字符时的一行
一个表达式,或者最后一个
子表达式的字符。
所以你观察到的行为是正确的。
From: 增强正则表达式 http://www.boost.org/doc/libs/1_45_0/libs/regex/doc/html/boost_regex/syntax/basic_extended.html还有:
\A
匹配缓冲区的开头
仅(与\`
).
\z
比赛于
仅缓冲区的末尾(与\'
).
\Z
匹配可选序列
缓冲区末尾的换行符:
相当于正则表达式\n*\z
我希望这有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)