我以为$表示字符串的结尾.但是,下面的一段代码给出了"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;
}
}
Run Code Online (Sandbox Code Playgroud)
我一直试图找到一个"多线"开关(实际上可以在PCRE中轻松找到),但没有成功......有人能指出我正确的方向吗?
此致,RP
由于 tr1 选择了 Boost::Regex,请尝试以下操作:
锚点:
当用作表达式的第一个字符或子表达式的第一个字符时,“^”字符应匹配行的开头。
当用作表达式的最后一个字符或子表达式的最后一个字符时,“$”字符应与行尾匹配。
所以你观察到的行为是正确的。
来自:Boost Regex以及:
\A仅在缓冲区的开头匹配(与 相同\`)。
\z仅在缓冲区末尾匹配(与 相同\')。
\Z匹配缓冲区末尾的可选换行符序列:相当于正则表达式\n*\z
我希望这有帮助。