Regexp

Виттман
Offline
Зарегистрирован: 03.02.2018

Здравствуйте, помогите новичку. Интересует реализация метода, принимающий строку и регулярное выражение, возвращающее стринг. (Понимаю что стринг не любят тут, но памяти в ESP пока хватает, да я вникаю только)

Разбирал пример по ссылке:

http://forum.arduino.cc/index.php/topic,59917.html

Заинтересовал следующий скетч:

#include <Regexp.h>

void setup ()
{
  Serial.begin (115200);
  Serial.println ();

  MatchState ms;
  char * str = "RGB:123";

  ms.Target (str);

  unsigned int index = 0;
  char buf [100];
  
  while (true)
  {
    char result = ms.Match ("%a", index);

    if (result == REGEXP_MATCHED)
    {
      Serial.println ("-----");
      Serial.print ("Matched on: ");
      Serial.println (ms.GetMatch (buf));
      Serial.println ("Captures:");
      for (int j = 0; j < ms.level; j++)
         Serial.println (ms.GetCapture (buf, j));
      // move past matching string
      index = ms.MatchStart + ms.MatchLength;
    }  // end of match
    else 
      break;  // no match or regexp error

  } // end of while

}  // end of setup

void loop () {}

Теперь вопрос, по скетчу:

char * str = "RGB:123";

почему  в строке если заменить значение "RGB:123" на переменную типа String с этим же значением,

String data = "RGB:123";

char * str = data;

то выскакивает ошибка компилятора: cannot convert 'String' to 'char*' in initialization 

в чём причина ? Как использовать строку ? 

 

 

b707
Offline
Зарегистрирован: 26.05.2017

использовать так:

ms.Target (data.c_str());

Ну а вообще советую отказаться от String и перейти на char* - тогда и не придется искать другие библиотеки.

Alexander
Offline
Зарегистрирован: 25.04.2010
Виттман
Offline
Зарегистрирован: 03.02.2018

А Алгоритм в кратце на словах расскажите тогда, если не затруднит ? Как делать ? А там дальше сам копать буду. У меня просто идея парсить регулярным выражением данные, в 2000 байт, которые с RS-232 придут. Думал в строку загнать, пробежаться регулярными, штук 20 их будет и присвоить переменным, и отослать как обработанное через ВайФай.

А как без стринг ? В массив Чар загонять ? А как потом искать ? 

Виттман
Offline
Зарегистрирован: 03.02.2018

спс буду знать.

b707
Offline
Зарегистрирован: 26.05.2017

Виттман пишет:

А как без стринг ? В массив Чар загонять ? А как потом искать ? 

Странный вопрос. Библиотека RegExp как раз рассчитана на массив Чар - значит она и искать может, не находите?

Виттман
Offline
Зарегистрирован: 03.02.2018

Спасибо, разобрался