簡體   English   中英

在正則表達式中使用變量名 C++

[英]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 ,因為wordstd::string 這與R"(\\bword\\b)" ,后者是一個字符數組。 以防萬一差異很重要。

警告的話:word 的內容可能來自程序外部。 您需要引用它,因為它可能包含正則表達式中的特殊字符。 否則,您可能會在您的程序中構建一個安全漏洞。 你應該可以參加一個除了你的導師之外沒有人會看的課堂練習,但最好還是放一行像

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

到您的代碼中,以防您在一年后忘記此問題時嘗試重用您的代碼。 這樣,編譯器就會提醒你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM