Базовое использование библиотеки Regexp Ника Гэммона

Я использую следующий код, измененный из примеров. Я получаю количество совпадений, но фактическое значение не отображается

#include <Regexp.h>

void setup() {
    Serial.begin(115200);
    MatchState ms;
    char buf [100];
    char buf2 [100] = "The quick brown fox jumps over the lazy wolf";
    ms.Target (buf2);
    unsigned int count = ms.MatchCount ("[aeiou]");

    Serial.print ("Found ");
    Serial.print (count);
    Serial.println (" matches.");
    for (int j = 0; j < count; j++)
    {
          Serial.print ("Capture number: ");
          Serial.println (j, DEC);
          Serial.print ("Text: '");
          Serial.print (ms.GetCapture (buf, j));
          Serial.println ("'");
    }
}
void loop(){}

, 👍0

Обсуждение

Не могли бы вы добавить результат, который вы получаете, к вашему вопросу?, @Gerben


1 ответ


Лучший ответ:

2

В регулярном выражении не определены группы захвата.

Регулярное выражение [aeiou] будет соответствовать любому из этих символов, но не будет захватывать их. Для захвата вам необходимо определить группу захвата, которая представляет собой последовательность токенов, заключенных в круглые скобки. Например:

([aeiou])

В вашей тестовой фразе "Быстрая коричневая лиса перепрыгивает через ленивого волка", которая должна соответствовать 11 разам и захватывать каждое совпадение, что приводит к захвату euioouoeea o.

Причина, по которой сопоставление и захват — это две совершенно разные вещи, заключается в том, что вы можете делать такие вещи, как [aeiou]([aeiou]), которые захватывают вторую гласную в последовательности из двух гласных. В вашем примере он будет соответствовать ui для quick и захватить только i.

,