Проблемы с регулярным выражением, отклоняющим строку - PullRequest
1 голос
/ 27 февраля 2020
regex_t regex;
int reti;
char msgbuf[100];

/* Compile regular expression, if two vowels it should be ok */
reti = regcomp(&regex, "[aoueiy].{2}", 0);
if (reti){
   fprintf(stderr, "Could not compile regex\n");
   exit(1);
}

/* Execute regular expression */
reti = regexec(&regex, "ao", 0, NULL, 0);
if (!reti) {
   puts("Match");
}
else if (reti == REG_NOMATCH) {
   puts("No match");
}

Я пытаюсь написать выражение, которое должно принимать строку, содержащую не менее двух гласных. Вот мой код, строка ao дает мне «Нет совпадения». Я новичок в регулярных выражениях и считаю, что руководство трудно использовать. Очень благодарен за любую помощь или советы.

1 Ответ

2 голосов
/ 27 февраля 2020

Ваше регулярное выражение соответствует гласной, за которой следуют 2 других символа. [aoueiy] соответствует гласной, . соответствует любым символам, и добавляется {2} после того, как оно соответствует двум символам. ao имеет только 1 символ после гласного, поэтому он не совпадает.

Правильное регулярное выражение [aoueiy].*[aoueiy]. Это соответствует двум гласным с любым количеством символов (включая 0) между ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...