我需要将文本'\ 0'与匹配'a'或'b'的相同正则表达式匹配。 (C++中的字符常量的正则表达式)。我试过了一堆不同的正则表达式,但还没有成功。我的最新尝试:如何在C++中匹配正则表达式中的 0字符?
^['].|\\0[']
大多数我试过其他的东西给赛格故障,所以这是真的我已经得到最接近的一次。
我需要将文本'\ 0'与匹配'a'或'b'的相同正则表达式匹配。 (C++中的字符常量的正则表达式)。我试过了一堆不同的正则表达式,但还没有成功。我的最新尝试:如何在C++中匹配正则表达式中的 0字符?
^['].|\\0[']
大多数我试过其他的东西给赛格故障,所以这是真的我已经得到最接近的一次。
这与我测试过的('a','b','\ 0')非常吻合。
如果您没有std::regex
或boost::regex
我想你可以从中得到的是,我使用的正则表达式是('.'|'\\0')
。
#include <boost/regex.hpp>
#include <string>
#include <iostream>
#include <vector>
int main() {
std::vector<std::string> strings;
strings.push_back(R"('a')");
strings.push_back(R"('b')");
strings.push_back(R"('\0')");
boost::regex rgx(R"(('.'|'\\0'))");
boost::smatch match;
for(auto& i : strings) {
if(boost::regex_match(i,match, rgx)) {
boost::ssub_match submatch = match[1];
std::cout << submatch.str() << '\n';
}
}
}
没有什么神奇的约'\0'
;它只是一个角色,就像任何其他角色一样,没有什么(几乎)特殊的你必须做的才能在正则表达式中使用它。你可能会碰到的唯一问题是,如果你在一个字符文字的中间使用它,你会传递一个函数,把它当作字符串的结尾。为了避免这种情况,迫使它变成std::string
:
const char s[] = "a\0b";
std::string not_my_str(s); // not_my_str holds "a"
std::string str(s, 3); // str holds "a\0b"
一旦你构建的字符串对象,嵌入式'\0'
就没有得到特殊待遇。当然,除了用专门处理它的功能来复制内容。
的作品(在这种情况下,使用C头)的正则表达式是:
^('(.|([\\]0))')
感谢@WhozCraig的帮助!
你使用什么编译器? – 2013-03-04 04:24:12
为什么你需要匹配它? '\ 0'是[null terminator](https://en.wikipedia.org/wiki/Null_character),所以它确实不是字符串的一部分,并且发现它很简单。 – congusbongus 2013-03-04 04:24:46
g ++我也在使用“regex.h”包 – arc 2013-03-04 04:24:59