如何解决使美元和插入符仅在字符串的开头/结尾匹配,而不在嵌入换行符之前/之后匹配
以下输出的小代码
<hello>
<world>
表明^
和$
也分别在\n
之后和之前匹配。如何更改此行为,并使它们仅在字符串的开头和结尾匹配? (在这种情况下,示例str
输入中将没有匹配项。)
#include <boost/regex.hpp>
#include <iostream>
int main() {
std::string tokenRegex = "^[^\n\r]+$";
std::string str = "hello\nworld";
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
flag:
boost::sregex_iterator rit{
std::begin(str),std::end(str),boost::regex{tokenRegex},boost::match_single_line // <-- here
};
这是一个匹配标志-您在匹配(或构造一个匹配的迭代器)时指定它,而不是在编译正则表达式时指定它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。