我需要确定文件是否是PCL编码的。所以我正在查看第一行,看它是否以ESC字符开头。如果您知道更好的方式随意建议。这是我的代码:
bool pclFlag = false;
if (containStr(jobLine, "^\\e")) {
pclFlag=true;
}
bool containStr(const string& s, const string& re)
{
static const boost::regex e(re);
return regex_match(s, e);
}
pclFlag未设置为true。
答案 0 :(得分:1)
您已将boost::regex e
声明为静态,这意味着它只会在您第一次调用函数时初始化。如果您在此处的搜索不是第一次调用,它将搜索第一次调用中传递的任何字符串。
regex_match必须与整个字符串匹配。尝试将“。*”(点星)添加到正则表达式的末尾。
重要强>
请注意,仅当表达式与输入序列的整数匹配时,结果才为真。如果要在序列中的某处搜索表达式,请使用regex_search。如果要匹配字符串的前缀,请使用regex_search并设置标志match_continuous
http://www.boost.org/doc/libs/1_51_0/libs/regex/doc/html/boost_regex/ref/regex_match.html
@JoachimPileborg是对的... if (jobline[0] == 0x1B) {}
要容易得多。
答案 1 :(得分:1)
Boost.Regex似乎有些过分。
bool pclFlag = jobLine.length() > 0 && jobLine[0] == '\033';
您还可以使用Boost字符串算法:
#include <boost/algorithm/string.hpp>
bool pclFlag = jobLine.starts_with("\033");
如果您正在查看字符串中的字符串是否包含转义符,请执行以下操作:
bool pclFlag = jobLine.find('\033') != npos;