Регулярное выражение: нет результатов, даже если подтверждено в тестере регулярных выражений - PullRequest
1 голос
/ 16 марта 2019

Я хочу выделить HDMI из строки >*sour=?#*SOUR=HDMI# (HDMI может быть разной длины). Я придумал это регулярное выражение, чтобы сделать это: (?<=SOUR=)[^#]*. Используя этот онлайн тестер регулярных выражений, я подтвердил, что это на самом деле работает.

enter image description here

В моем коде Arduino я использую Библиотека RegExp Ника Гэммона . Я следовал за документацией Ника , и этот код работает нормально и находит два совпадения, как в его примере. Однако, когда я вставляю свои параметры Target и Match выше, метод Match не возвращает совпадений (т. Е. Serial.println("no match") выполняется). Любой совет?

Вот мой код:

#include <Regexp.h>

void setup ()
{
  Serial.begin(115200);
  MatchState ms;
  ms.Target (">*sour=?#*SOUR=HDMI#");

  char result = ms.Match ("(?<=SOUR=)[^#]*");
  if (result == REGEXP_MATCHED)
  {
    char buf [100]  
    Serial.print ("Captures: ");
    Serial.println (ms.level);

    for (int j = 0; j < ms.level; j++)
      {
      Serial.print ("Capture number: ");
      Serial.println (j, DEC);
      Serial.print ("Text: '");
      Serial.print (ms.GetCapture (buf, j));
      Serial.println ("'");
      }
  }
  else if (result == REGEXP_NOMATCH)
  {
    Serial.println("no match");
  }
}

void loop () {}

1 Ответ

1 голос
/ 16 марта 2019

Библиотека, которую вы используете, не поддерживает внешний вид.

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

 char result = ms.Match ("SOUR=([^#]*)");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...