Jump to content
Che

[AJUTOR] Regex in C++

Recommended Posts

Posted

Vreau sa folosesc o expresie in C++ care sa preia un text (numere, cifre, - si _) dintr-un tabel html gen: <td>text</text> <td>text</text> <td>text</text> <td>text</text> <td>text</text> <td>text</text> <td>text</text> <td>text</text> <td>text</text>

Nu resuesc sa-l fac sa mearga. I-am faut debug si se pare ca expresia in regex nu-i in regula.

Aici crapa: regex e("(?<=<td>).*?(?=<\/td>)");

Stie cineva cum trebuie scrisa ?

Multumesc !

Un An Nou Fericit !

Sarbatori Fericite ! :D

Posted
<td>(.*?)<\/td>

Merge. Multumesc !

Dar tu de unde stii ? Unde scrie ca expresia trebuia asa si nu asa cum am scris-o eu ? Cum ai transformat-o ca sa mearga ?

@MrGrj La fel. ^

  • Active Members
Posted (edited)

O sa iti raspund eu daca Garry nu are nimic impotriva:

In momentul in care lucrezi mult in C++(sau orice alt limbaj), si faci programe in care folosesti regex pe anumite pagini HTML + diferite API-uri ca sa ajungi la content-ul dorit, pur si simplu iti intra in reflex.

Dupa ce ajungi sa lucrezi mai mult, vei vedea ca o sa fie mai usor. Ce ai facut tu acolo nu e tocmai ok din punct de vedere structural si functional.

// Edit: Nici eu nu sunt as in regex, dar invat ceva nou in fiecare zi

<td.*?> - asta inseamna ca ia tag-ul td cu tot ce mai are in el. Exemplu: <td class="ex">

din cate poti observa .* marcheaza faptul ca exista ceva acolo, iar ?

Match the preceding expression zero or one time.

(.*?) - tot ce este intre cele doua taguri <td>

// @GarryOne iti poate explica mai bine :)

Edited by MrGrj
Posted

@MrGrj

1. Cum faci ca expresia sa mearga pana la sfarsitul randului ca daca ii dau ca input de exemplu mai multe unitati de astea:

<td>text</text> <td>text</text> <td>text</text> <td>text</text>

mi-o ia doar pe prima si afiseaza text si atat ? Cum fac sa afiseze text de atatea ori cat este pe acel rand ?

2. Dar daca sunt mai multe randuri, sa zicem un tabel, cum faci ca sa ia toate randurile ?

3. Dar ca sa ia toate randurile sa le bage intr-o matrice a[n] pe fiecare ? Trebuie cu for loop sau se poate din prima ?

Posted (edited)
O sa iti raspund eu daca Garry nu are nimic impotriva:

In momentul in care lucrezi mult in C++(sau orice alt limbaj), si faci programe in care folosesti regex pe anumite pagini HTML + diferite API-uri ca sa ajungi la content-ul dorit, pur si simplu iti intra in reflex.

Dupa ce ajungi sa lucrezi mai mult, vei vedea ca o sa fie mai usor. Ce ai facut tu acolo nu e tocmai ok din punct de vedere structural si functional.

// Edit: Nici eu nu sunt as in regex, dar invat ceva nou in fiecare zi

<td.*?> - asta inseamna ca ia tag-ul td cu tot ce mai are in el. Exemplu: <td class="ex">

din cate poti observa .* marcheaza faptul ca exista ceva acolo, iar ?

(.*?) - tot ce este intre cele doua taguri <td>

// @GarryOne iti poate explica mai bine :)

Da, stiu, dar din punct de vedere al limbajului regex nici asta a mea nu e gresita: (?<=<td>).*?(?=<\/td>)

Practic ia ce se afla intre cele doua taguri <td></td>. Am testat-o aici si merge: https://regex101.com/

Insa in C++ nu merge. Eu asta te intrebam, de unde stii care anume merge si care nu merge in C++ ? Ca spre exemplu, aici: https://regex101.com/ are doar pentru js si python. Este si vreun tester de asta ptr. C++ ? Care ?

LE: Acum am observat ca e dublu post. Am incercat sa-l sterg si sa le unesc dar nu merge. Scuze.

Edited by Che
Posted
Da, stiu, dar din punct de vedere al limbajului regex nici asta a mea nu e gresita: (?<=<td>).*?(?=<\/td>)

Practic ia ce se afla intre cele doua taguri <td></td>. Am testat-o aici si merge: https://regex101.com/

Insa in C++ nu merge. Eu asta te intrebam, de unde stii care anume merge si care nu merge in C++ ? Ca spre exemplu, aici: https://regex101.com/ are doar pentru js si python. Este si vreun tester de asta ptr. C++ ? Care ?

LE: Acum am observat ca e dublu post. Am incercat sa-l sterg si sa le unesc dar nu merge. Scuze.

Î?i voi r?spunde eu la întrebare dar mai întâi spune-mi ce compilator folose?ti.

Posted
Î?i voi r?spunde eu la întrebare dar mai întâi spune-mi ce compilator folose?ti.

Visual Studio C++ 2013. Am mai folosit si CodeBlocks dar am renuntat la el. Acum folosesc doar MS Visual Studio C++ 2013, mi se pare cel mai bun.

Posted
Visual Studio C++ 2013. Am mai folosit si CodeBlocks dar am renuntat la el. Acum folosesc doar MS Visual Studio C++ 2013, mi se pare cel mai bun.

Super.

Cite?te asta ?i vei în?elege de ce nu merge respectivul regex.

PS: JS e la fel.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...