gpt4 book ai didi

c++ - 在正则表达式中使用变量名 C++

转载 作者:行者123 更新时间:2023-11-30 01:13:39 28 4
gpt4 key购买 nike

我正在为类(class)开发交叉引用生成器。在这个项目中,我们将遍历一个文件并列出所有单词及其行号和在该行出现的次数,如下所示:

答:49:1

a: 9:1, 10:1, 12:2, 14:1, 17:2, 19:1, 26:1, 27:1, 28:2,: 39:1, 41:1, 43:1, 45:2, 46:2, 49:1, 50:2, 51:1, 56:3,: 81:1, 82:1, 94:1, 111:1, 112:1, 114:1, 117:1, 132:1, 135:1,: 138:1, 142:2, 143:1, 144:1, 152:1, 156:1, 161:2, 163:1, 164:1,: 167:1, 169:1, 175:1, 182:2, 190:1, 192:1

我正在使用正则表达式和 regex_iterator 来查找每行中每个单词的出现次数。我的问题是如何使用变量名而不是字符串文字?

例如:而不是:R"(\bthis\b)"

我想这样做:

string word = "this";
R"(\bword\b)"

希望这是有道理的。

最佳答案

R"(\bthis\b)" 是一个原始字符串文字,而不是正则表达式文字,以防你这么想。 C++ 中没有正则表达式文字,但 std::regexp 可以从字符数组或 std::string 构造。

所以你可以简单地做

string word = "this";
R"(\b)" + word + R"(\b)"

或者,等效地使用普通的旧字符串文字

string word = "this";
"\\b" + word + "\\b"

注意:在这两种情况下,结果都是 std::string,因为 wordstd::string。这与 R"(\bword\b)" 不同,它是一个字符数组。以防万一差异很重要。

警告 一句话:单词的内容可能来自程序外部。您需要引用它,因为它可能包含正则表达式中特殊的字符。否则,您可能会在您的程序中构建安全漏洞。对于除了你的导师之外没有人会看的类练习,你应该没问题,但最好还是写一行

#warning "word" needs proper quoting to avoid security vulnerabilities

到您的代码中,以防您在一年后忘记这个问题时尝试重用您的代码。这样,编译器就会提醒你。

关于c++ - 在正则表达式中使用变量名 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31765852/

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