#c #regex #match
#c #регулярное выражение #совпадение
Вопрос:
Я борюсь с этой ошибкой компилятора C , чтобы заставить мою функцию regex_match () работать. Код:
#include <iostream>
#include <string>
#include <regex>
using namespace std;
struct Person {
Person(string name, int age)
: n{name}, a{age}
{
regex r("^([!:*amp;%#@^\[\]"']) "); // :*[]"'amp;^%#@!
for(char test : n) {
cout << "Character: " << test;
if(regex_match(test, r)) {
cout << endl << "Error: wrong character!" << endl;
}
}
}
string n;
int a;
};
int main() {
Person Goofy("Goofy",11);
return 0;
}
Я хочу проверить, содержит ли n хотя бы один из символов, которые я написал в регулярном выражении r ().
Кстати, для людей, изучающих регулярные выражения, я нашел отличный веб-сайт: https://regex101.com .
Какие-либо предложения? Спасибо!!
Ответ №1:
test
является символом. std::regex_match
Для действия нет char
перегрузки.
Я не уверен, хотите ли вы проверять каждый символ по списку символов или только первый. Если это все, вы можете использовать std::any_of
:
char const constexpr m[] = R"(:*[]"'amp;^%#@!)";
for(char test : n) {
if(any_of(begin(m), end(m), [test](char c){ return c == test; })) {
cout << endl << "Error: wrong character!" << endl;
}
}
Основываясь на дополнительных комментариях, я думаю, что понимаю, что вы хотели: проверьте n
, содержит ли строка какие-либо «недопустимые» символы. Для этой задачи std::regex_search
лучше подходит:
regex r{R"([:*[]"'amp;^%#@!])"};
if(regex_search(n, r)){
cout << endl << "Error: wrong character!" << endl;
}
Комментарии:
1. Я новичок, не могли бы вы объяснить, пожалуйста? Преобразование теста char в строку не сработало..
2. Я отредактировал пример.
regex_match
предполагается, что строка соответствует регулярному выражению, а не одному символу. Это не намного больше, чем это.3. @m3n741 если бы вы могли сказать мне, чего именно вы пытаетесь достичь, я мог бы помочь вам лучше, я надеюсь.
4.
std::find_first_of(n.begin(), n.end(), m.begin(), m.end())
эквивалентно тесту в вашем первом фрагменте и не требует цикла или лямбда.5. Я хотел проверить, есть ли в строке n какой-либо из знаков регулярного выражения r, и могу ли я использовать regex_match для этого. Спасибо за быстрый ответ 🙂