máte někdo zkušenosti s jejich použítím pod Arduinem?
Jde o to, že mám řádek který vypadá třeba takto:
GET /Test?parametr=1 HTTP/1.1
GET /Test HTTP/1.1
GET /Test?parametr=1#Zde HTTP/1.1
GET /Test?parametr1=1¶metr2=2#Zde HTTP/1.1
a já z toho chci vybrat Test případně parametr=... a Zde.
Vyrobil jsem si tento výraz: ^(?:GET\s+\/)(?'stranka'.*?)(?:\?(?'parametry'.*?)){0,1}(?:#(?'kapitola'.*?))*(?:\s+HTTP\/.*)$ (viz. https://regex101.com/r/2LwCkx/1)ale knihovna Regexp.h mi vrací stále nula nalezeno.
Zkouším tento kód, který jsem opsal z nějakého tutorialu.
Kód: Vybrat vše
String rozeberRadek(String vRadek, String &vParametry, String &vKapitola) {
MatchState ms;
char buf[100];
char buf2[100];
/**/
vRadek.toCharArray(buf2,100);
Serial.println(buf2);
ms.Target(buf2);
//Původní výraz "^(?:GET\s+\/)(?'stranka'.*?)(?:\?(?'parametry'.*?)){0,1}(?:#(?'kapitola'.*?))*(?:\s+HTTP\/.*)$"
unsigned int count = ms.MatchCount("^(?:GET\s+\/)(.*?)(?:\?(.*?)){0,1}(?:#(.*?))*(?:\s+HTTP\/.*)$");
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("'");
}
}
Díky
Pb