gpt4 book ai didi

C++ 正则表达式转义像 "."这样的标点字符

转载 作者:行者123 更新时间:2023-12-03 06:58:54 34 4
gpt4 key购买 nike

匹配“.”在带有 std::tr1::regex 类的字符串中让我使用了一个奇怪的解决方法。

为什么我需要检查“\\\\.”而不是“\\.”?

regex(".") // Matches everything (but "\n") as expected.
regex("\\.") // Matches everything (but "\n").
regex("\\\\.") // Matches only ".".

有人可以解释一下为什么吗?这真的很困扰我,因为我的代码是使用 boost::regex 类编写的,而它不需要这种语法。

编辑:抱歉,regex("\\\\.") 似乎没有匹配任何内容。

编辑2:一些代码

void parser::lex(regex& token)
{
// Skipping whitespaces
{
regex ws("\\s*");
sregex_token_iterator wit(source.begin() + pos, source.end(), ws, regex_constants::match_default), wend;
if(wit != wend)
pos += (*wit).length();
}

sregex_token_iterator it(source.begin() + pos, source.end(), token, regex_constants::match_default), end;
if (it != end)
temp = *it;
else
temp = "";
}

最佳答案

这是因为 \. 被解释为转义序列,而语言本身试图将其解释为单个字符。您希望正则表达式包含实际的字符串“\.”,其写作 \\. 因为 \\ 是反斜杠字符的转义序列(\)。

关于C++ 正则表达式转义像 "."这样的标点字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13842038/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com