如何在c++中匹配正则表达式中的字符

How can I match the character in a regex in C++?

本文关键字:正则表达式 字符 c++      更新时间:2023-10-16

我需要用匹配'a'或'b'的相同正则表达式匹配文本''。(c++中用于字符常量的正则表达式)。我已经尝试了一堆不同的正则表达式,但还没有得到一个成功的。我的最新尝试:

^['].|\0[']

我尝试过的大多数其他东西都给出了seg错误,所以这真的是我得到的最接近的。

这与我所测试的('a','b','')非常吻合。

如果您没有std::regexboost::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"('')");
    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';
        }
    }
}
示例

''没有什么神奇的;它只是一个字符,就像任何其他字符一样,在正则表达式中使用它(几乎)不需要做任何特别的事情。你可能遇到的唯一问题是,如果你把它用在你传递给一个函数的字符字面量的中间,这个函数会把它当作字符串的结尾。为了避免这种情况,将其强制转换为std::string:

const char s[] = "ab";
std::string not_my_str(s); // not_my_str holds "a"
std::string str(s, 3);     // str holds "ab"

一旦构造了字符串对象,嵌入的''就不会得到特殊处理。当然,除非您使用特殊对待的函数来复制内容。

有效的正则表达式(在本例中,使用C头)是:

^('(.|([\]0))')

感谢@WhozCraig的帮助!