Voglio abbinare questo modello html: <12>Some content with n in it<12>
Importante è che solo gli elementi completi sono contrassegnati (i numeri DEVONO corrispondere), significa che quando manca un tag il contenuto non deve essere contrassegnato. <12>Some content with n in it<13>test<13>
Questo è quello che ho ottenuto finora:
(<s*[0-9]+>)(.*?[^<]*?)(<s*[0-9]+>)
Questo è quello che mi aspetto che dovrebbe funzionare ma in realtà non lo fa:
(<s*[0-9]+>)(.*?[^<]*?)(<s*[0-9]+>)1
Ho provato con questo editor ma il backreference non funziona come mi aspetto. Perché il backreference verso il primo gruppo di acquisizione non funziona? La soluzione dovrebbe funzionare in C ++.
risposte:
3 per risposta № 1Prova questo:
<s*(d+)s*>((.|n)*?)<s*1s*>
- 1 ° gruppo di cattura (d +)
- d + corrisponde a una cifra (uguale a [0-9])
- + Quantificatore - Partite tra uno e illimitate volte (goloso)
- (|. N) *? . corrisponde a qualsiasi carattere (eccetto per i terminatori di riga) e n corrisponde ai terminatori di riga
- ? lo rende pigro (pigro)
- 1 backreference al primo gruppo di cattura
Esempio di codice C ++ 14:
#include <regex>
#include <string>
#include <iostream>
using namespace std;
int main()
{
string regx = R"(<s*(d+)s*>((.|n)*?)<s*1s*>)";
string input = "<1>test1<1><2>Tesnt2<2>sfsaf<3><4>test4<4>";
smatch matches;
while (regex_search(input, matches, regex(regx)))
{
cout<<matches[2]<<endl;
input = matches.suffix().str();
}
return 0;
}