Visualizzazione risultati 1 fino 4 di 4

Discussione: [php] Ennesimo problema REGEX!

  1. #1
    Guest

    Predefinito [php] Ennesimo problema REGEX!

    Ciao a tutti, ho un ennesimo problema con le regex.
    L'array rimane vuoto... eppure penso di aver fatto l'escape dove serviva....
    Codice:
    /<img alt=\".+\" title=\".+\" border=[0-9]{1} height=[0-9]{,3} src=\"(.+)\" width=[0-9]{,3} id=logo onload=\"window\.lol&&lol\(\)\"\/>/
    Codice PHP:
    <img alt="ciaooooo come va?" title="questo è il titolo" border=2 height=320 src="http://forum.it.altervista.org/images/logo.png" width=500 id=logo onload=\"window.lol&&lol()"/>
    Grazie mille!! =)
    Ultima modifica di sIM : 21-10-2010 alle ore 15.17.03

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Codice:
    /<img alt=".+" title=".+" border=\d height=\d{3} src="(.+)" width=\d{3} id=logo onload="window\.lol&&lol\(\)"\/>/U
    Nota che ho messo U come modificatore, sta per Ungreedy ( per maggiori informazioni: http://php.net/manual/en/reference.p....modifiers.php )

    Poi ho modificato {,3} in {3} ( ma puoi fare qualcosa di più generico {1,3} o + ).
    Era proprio {,3} che non permetteva alla regexp di catturare la stringa oltre al fatto che .+ essendo greedy cattura più del dovuto, invece di catturare solo l'attributo alt ( nel primo caso ) può arrivare fino all'ultima virgoletta cioè fino all'attributo onload...

  3. #3
    Guest

    Predefinito

    Ok così funziona... però io non so' di preciso se i caratteri sono 3 {3}, infatti ho messo da niente a massimo 3 xD Per il resto funziona... come posso risolvere questo "extra"?
    Grazie mille! =)
    PS. Non ho capito bene quel greedy... example?

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Allora metti {1,3} da uno a 3 caratteri. Tanto non possono essere di meno giusto?

    Devi sapere che ogni quantificatore ( +, *, ? ) è greedy ( ingordo ) nel senso che cattura quanti più caratteri possibili:
    Codice PHP:
    $str = 'esempio: "ciao" e "blabla"';
    // voglio cattuare da questa stringa solo: ciao

    preg_match('/"(.+)"/', $str, $m);

    echo
    $m[1]; // ciao" e "blabla non è risultato che ti aspetti!

    preg_match('/"(.+?)"/', $str, $m);

    echo
    "\n", $m[1]; // ciao, il risultato che ti aspetti!
    Hai 3 modi per definire un quantificatore ungreedy:
    1. Metti un punto interrogativo dopo di esso. Esempio: .+?
    2. Inserisci U nei modificatori della regexp ( così rendi tutto ungreedy )
    3. Tramite le asserzioni (?U:(.+))


    Spero sia chiaro!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •