这个跟随输出的小代码
<hello>
<world>
证明^
和$
也分别在n
之后和之前匹配。如何更改此行为,并让它们仅在字符串的开头和结尾匹配?(在这种情况下,示例中str
输入中没有匹配项。
#include <boost/regex.hpp>
#include <iostream>
int main() {
std::string tokenRegex = "^[^nr]+$";
std::string str = "hellonworld";
boost::sregex_iterator rit{std::begin(str), std::end(str), boost::regex{tokenRegex}};
boost::sregex_iterator end;
while (rit != end) {
std::cout << '<' << rit->str() << '>' << 'n';
++rit;
}
}
您需要使用match_single_line
标志:
boost::sregex_iterator rit{
std::begin(str),
std::end(str),
boost::regex{tokenRegex},
boost::match_single_line // <-- here
};
这是一个匹配标志 - 您在匹配(或构造匹配的迭代器)时指定它,而不是在编译正则表达式时指定它。