Вот регулярное выражение:
((([a-z])*Map|map)\\[((MapFields::([a-z]|[A-Z])*)|(([a-z]|[A-Z])*))|("([a-z]|[A-Z]|[0-9]|_)*")*\\]( )*=( )*([a-z]|[A-Z])*;)
и вот мои тесты:
- map [MapFields :: abCd] = abCd;
- myMap [ MapFields :: abCd] = abCd;
- map [abCd] = AbCd;
- map [AbCd] = abCd;
- map [AbCd] = abCd;
- myMap [AbCd] = abCd;
- map ["AB123"] = abCd;
- map ["AB_CD"] = abCd;
- map ["AB_CD "] = abCd;
И это прекрасно работает здесь: https://regexr.com
Но, когда я пытаюсь проверить свои случаи с помощью регулярного выражения C ++ 11 .час. Я получаю недопустимые совпадения. Я понял, что из-за квадратных скобок мне нужно экранировать.
Вот код C ++,
string data[10] = {
//array of cases
};
try {
regex rgx(regex string);
for ( int i = 0 ; i < 10 ; i++ ) {
if ( regex_match(data[i], rgx) ) {
cout << "string literal matched\n";
}
else {
cout << "string literal unmatched\n";
}
}
}
catch ( exception ex ) {
cout << "Exception: " << ex.what() << endl;
}
Как мне избежать квадратных скобок, чтобы мой код мог работать хорошо.
Спасибо:)