Как сопоставить вектор регулярного выражения с одной строкой? - PullRequest
1 голос
/ 17 октября 2019

Если я хочу убедиться, что одна строка полностью совпадает с любой строкой в ​​векторе строк, тогда я буду использовать

std::find(vectOfStrings.begin(), vectOfStrings.end(), "<targetString>") != v.end()

Если целевая строка совпадает с любой строкой в ​​векторе, тогда онавернет true.

Но что, если я хочу проверить, совпадает ли одна строка с любым из векторов регулярных выражений? Есть ли какая-либо стандартная библиотека, которую я могу использовать, чтобы она работала, как std::find(vectOfRegExprsns.begin(), vectOfRegExprsns.end(), "<targetString>") != v.end()?

Любые предложения будут высоко оценены.

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Как насчет использования std::find_if() с lambda?

std::find_if(
vectOfRegExprsns.begin(), vectOfRegExprsns.end(),
[](const std::string& item) { return regex_match(item, std::regex(targetString))});
0 голосов
/ 17 октября 2019

Вы можете достичь того, что хотели, написав одно регулярное выражение с операторами чередования, чтобы охватить все нужные вам шаблоны. Вы можете просто использовать std :: regex_match.

Однако вы должны быть осторожны с порядком чередований, проверьте этот ответ для получения дополнительной информации: https://stackoverflow.com/a/23536282/11420760

a = "P1 | P2 | P3"
regex_match(a, b)
...