Help: regex

Marius '95

troubleShooter
Sugar daddy
Se da textul:

ABCD
EFGH

Am nevoie de un regex compatibil PHP care sa imi gaseasca
CD
EF
dar nu si
CD EF

Cum fac?
Mentionez ca linia noua este de tip <CR><LF>.

Am incercat:
~CD.EF~s = imi gaseste si "CD EF", cu spatiu in loc de linie noua
~CD$EF~m = nu trece mai departe de $
~CD$^EF~m = nu trece mai departe de $
~CD^EF~m = esec total, se opreste dupa D

Help!

PS:
~CD$.EF~ms = Merge! WTF?! Sa imi explice si mie cineva de ce merge si ce caracter imi gaseste acolo punctul.
 

miahi

Wizzard
Sugar daddy
Ideea e că $ și ^ nu mănâncă din caractere, doar poziționează (de-aia le zice ancore). La tine se oprește la $ corect, dar nu face match pe următorul caracter - tu te aștepți ca următorul caracter după $ să fie E, dar pentru că $ nu mănâncă din caractere, următorul caracter e de fapt \r (pe care nu îl pui în pattern => nu face match).

CD$\r\nEF e echivalent cu CD\r\nEF în acest caz.
 

Marius '95

troubleShooter
Sugar daddy
Da, ma asteptam ca $ si ^ sa corespunda unui caracter. Abia acum am inteles de ce nu mergea. Multumesc.
 

Marius '95

troubleShooter
Sugar daddy
Help! iar...
Am nevoie de un regex care sa gaseasca textul din ultima celula a unui tabel HTML de pe fiecare rand. Mentionez ca \r\n sunt puse aiurea prin HTML.

Am incercat
~<td>.*?</td>[^<]*?</tr>~gms
dar <td> imi gaseste prima celula, degeaba pun ? dupa .*, ca acel ? are efect doar asupra </td> care urmeaza.
 

miahi

Wizzard
Sugar daddy
Vezi lookaround. Mai jos exemplu cu negative lookahead (da, se poate și mai frumos, dar asta este)
Code:
<td>(?:.(?!>))*</td>(?:.(?!>))*</tr>

Te mai joci și tu cu ele.

De fapt se poate și mai simplu

Code:
<td>[^<]*<\/td>[^<]*<\/tr>
 
Last edited:

Marius '95

troubleShooter
Sugar daddy
Nu merge cu [^<]. Incercasem eu deja. Continutul celulei poate avea diverse tag-uri, gen <p>, <div>.
Si nu merge nici (?!>) din acelasi motiv.

OK, deci randurile din tabel arata asa:
Code:
<tr><td>
                <p>
                  <strong>Operating System</strong>
                </p>
              </td><td>
                <p>
                  <strong>Maximum Security Impact</strong>
                </p>
              </td><td>
                <p>
                  <strong>Aggregate Severity Rating</strong>
                </p>
              </td><td>
                <p>
                  <strong>Updates Replaced*</strong>
                </p>
              </td></tr>
            <tr><td colspan="4">
                <p>
                  <strong>Windows Server 2003</strong>
                </p>
              </td></tr>
            <tr><td>
                <p>
                  <a href="https://www.microsoft.com/downloads/details.aspx?familyid=F2B9D541-9BE0-4E81-A948-48F810E1A863">Windows Server 2003 Service Pack 2</a> <br />(3067505)</p>
              </td><td>
                <p>Elevation of Privilege</p>
              </td><td>
                <p>Important</p>
              </td><td>
                <p>3061518 in <a href="http://go.microsoft.com/fwlink/?LinkId=536690">MS15-055</a> </p>
              </td></tr>
            <tr><td>
                <p>
                  <a href="https://www.microsoft.com/downloads/details.aspx?familyid=92AFF2B2-7D6E-4D29-BC2E-111F08BEFDAA">Windows Server 2003 x64 Edition Service Pack 2</a> <br />(3067505)</p>
              </td><td>
                <p>Elevation of Privilege</p>
              </td><td>
                <p>Important</p>
              </td><td>
                <p>3061518 in <a href="http://go.microsoft.com/fwlink/?LinkId=536690">MS15-055</a> </p>
              </td></tr>
Va rog, nu radeti! :tongue:
Imi trebuie ultima celula, aia cu MS15-055.
 

Marius '95

troubleShooter
Sugar daddy
Regex in Total Commander:
Cum fac sa corectez un string care contine ora din GMT in ora locala (GMT+3)? Adica sa adaug 3 ore la cifrele alea?
 

IceCub

Membru Senior
Marius, o solutie "intortocheata" (dar pe care am mai aplicat-o cu succes) e sa faci un "dir /b >> fisier.txt" dupa care importi fisierul txt in Excel, intr-o alta coloana prelucrezi cum vrei sa arate noile nume si exporti totul intr-un fisier *.bat cu comenzi de genul "ren <nume coloana1> <nume coloana2>"
 
Last edited:

Marius '95

troubleShooter
Sugar daddy
Se da string-ul:
xxx 123 456 789 xxx
Cum fac sa obtin toate grupurile de cifre, dar fara sa repet \d{3} de 3 ori?
Am incercat:
xxx(?:\s(\d{3}))+\sxxx
dar scoate doar ultimul grup.
 

Marius '95

troubleShooter
Sugar daddy
Da, dar trebuie sa verific inceputul si sfarsitul randului (acele xxx-uri), ca sunt si randuri care nu ma intereseaza. Nu le-am scris degeaba.
 
Top