我想將一個正則表達式(對於密碼)轉換爲C++代碼。正則表達式到C++代碼
這是正則表達式:
(?=^.{6,}$)(?=.*\d)(?=.*[[email protected]#$%^&*(){}\[\]=\+\-_:;"'`<,>.?\/|\\~]+)(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$
的密碼應該至少有一個大寫字母,一個小寫字母,一個特殊字符和一個數字。然而,我的C++代碼似乎允許像「aaaaA1」這樣的密碼不包含特殊字符。我的代碼如下。
vector<string> StupidNonDynamicBrute(int Depth) {
vector<string> Words;
string Word = "";
regex Expression ("(?=^.{6,}$)(?=.*\\d)(?=.*[[email protected]#$%^&*(){}\\[\\]=\\+\\-_:;\"\'`<,>.?\\/|\\~]+)(?![.\\n])(?=.*[A-Z])(?=.*[a-z]).*$");
ofstream Output;
Output.open("Output1.txt");
char Letters[] ="[email protected]#$%^&*(){}[]=+-_:;\"\'`<,>.?/|\\~";
for (int i = 0; i < 94; i++) {
for (int j = 0; j < 94; j++) {
for (int k = 0; k < 94; k++) {
for (int b = 0; b < 94; b++) {
if (Depth > 4) {
for (int m = 0; m < 94; m++) {
for (int v = 0; v < 94; v++) {
Word = "";
Word += Letters[i];
Word += Letters[j];
Word += Letters[k];
Word += Letters[b];
Word += Letters[m];
Word += Letters[v];
if (regex_match(Word, Expression)) {
Words.push_back(Word);
Output << Word << endl;
}
}
}
} else {
Word = "";
Word += Letters[i];
Word += Letters[j];
Word += Letters[k];
Word += Letters[b];
Words.push_back(Word);
Output << Word << endl;
}
}
}
}
}
return Words;
}
上的代碼的一些洞察:它產生字母,數字和符號的長度爲4或6中的所有可能的組合作爲密碼使用。我還創建了一個遞歸動態函數來執行此操作(對於任何密碼長度),但由於某種原因它速度非常慢。
你爲什麼不只是檢查這些條件明確? (而不是試圖將它們全部塞進一個無法理解的正則表達式。) –