如何使用Boost正则表达式检测字符串中的ESC

时间:2012-10-05 13:02:08

标签: c++ boost

我需要确定文件是否是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。

2 个答案:

答案 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;