[英]Using variable names with regular expressions c++
我正在為班級開發交叉引用生成器。 在這個項目中,我們將遍歷一個文件並列出所有單詞及其行號和該行出現的次數,如下所示:
答: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
,因為word
是std::string
。 這與R"(\\bword\\b)"
,后者是一個字符數組。 以防萬一差異很重要。
警告的話:word 的內容可能來自程序外部。 您需要引用它,因為它可能包含正則表達式中的特殊字符。 否則,您可能會在您的程序中構建一個安全漏洞。 你應該可以參加一個除了你的導師之外沒有人會看的課堂練習,但最好還是放一行像
#warning "word" needs proper quoting to avoid security vulnerabilities
到您的代碼中,以防您在一年后忘記此問題時嘗試重用您的代碼。 這樣,編譯器就會提醒你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.