0

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

4

2 回答 2

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;
于 2012-10-05T14:24:14.503 回答
1

您已声明boost::regex e为静态,这意味着它只会在您的函数第一次被调用时被初始化。如果您在此处的搜索不是第一次调用,它将搜索在第一次调用中传递的任何字符串。

regex_match 必须匹配整个字符串。尝试在正则表达式的末尾添加“.*”(点星)。

重要
请注意,仅当表达式与整个输入序列匹配时,结果才为真。如果要在序列中的某处搜索表达式,请使用 regex_search。如果要匹配字符串的前缀,则使用带有标志 match_continuous 集的 regex_search。
http://www.boost.org/doc/libs/1_51_0/libs/regex/doc/html/boost_regex/ref/regex_match.html

@JoachimPileborg 是对的…… if (jobline[0] == 0x1B) {}要容易得多。

于 2012-10-05T13:19:41.573 回答