Visualizzazione dei risultati da 1 a 10 su 10

Discussione: RegExp

  1. #1
    Utente bannato
    Registrato dal
    Apr 2011
    Messaggi
    113

    RegExp

    <dt>Listino</dt><dd>&euro; 14,00</dd>

    $pattern = "";

    preg_match($pattern,$htmlContentString,$matches);
    $result = isset($matches[0]) ? $matches[0] : '';

    come faccio a fare questo pattern mi serve quello che è contenuto in:
    <dt>Listino</dt><dd>........................................</dd>

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    $content = "<dt>Listino</dt><dd>€ 14,00</dd>";
    $regex = '#<dt>Listino</dt><dd>(.*)</dd>#';
    $result = preg_match($regex,$content);

    O meglio

    $content = "<dt>Listino</dt><dd>€ 14,00</dd>";
    $regex = '#<dt>Listino</dt><dd>(€ [0-9]+,[0-9]{1,2})</dd>#';
    $result = preg_match($regex,$content);

    Se il contenuto è sempre il valore in euro.

    Comunque vatti a studiare le regex.


  3. #3
    Utente bannato
    Registrato dal
    Apr 2011
    Messaggi
    113
    ciao ho iniziato un po a studiarle..

    ma come mai cosi non funziona?

    $regex = '#<dt>Listino</dt><dd>[]</dd>#';

  4. #4
    Utente bannato
    Registrato dal
    Apr 2011
    Messaggi
    113
    mettendo (.*) va..

    quindi con questo (.*) estrae tutto quello che c'è in maniera non specifica giusto?

  5. #5
    Originariamente inviato da jookla
    ciao ho iniziato un po a studiarle..

    ma come mai cosi non funziona?

    $regex = '#<dt>Listino</dt><dd>[]</dd>#';
    La domanda vera e': perche' mai avrebbe dovuto funzionare?

  6. #6
    Utente bannato
    Registrato dal
    Apr 2011
    Messaggi
    113

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Il [ ] definisce una classe di elementi. Quindi [a] matcha la "a", [abc] matcha "a" o "b" o "c". Poi [a-z] matcha tutte le lettere dalla "a" alla "z". [0-9] matcha tutti i numeri.
    Puoi anche combianare tutte queste cose. Quindi puoi mettere [a-bA-B0-9] per matchare tutti le lettere e tutti i numeri.
    Il ( ) definisce una sub-pattern.
    Il "." invece matcha qualunque carattere.
    L' * invece dice: "Se si ripete 0 o più volte". Quindi ".*" matcha qualunque cosa ripetuta per 0 o più volte.
    Ora puoi combinare tutto e ottenere "(.*)". Questo nel preg_match darà un secondo elemento nell'array contenente SOLO quello dentro le parentesi.
    Quindi:

    #<dt>Listino</dt><dd>(.*)</dd>#

    Ti darà come risultato un Array con due elementi:

    "<dt>Listino</dt><dd>€ 14,00</dd>"
    "€ 14,00"

    Non so se ora hai le idee un po' più chiare



  8. #8
    Utente bannato
    Registrato dal
    Apr 2011
    Messaggi
    113
    ah si si è molto più chiaro... ma per estrarre solo il contenuto che mi interessa? senza metterlo in un array?? (non facendo nessuna distinzione tra i caratteri)

    c'è un metodo che mi restituisca solo il contenuto di:

    <dt>Listino</dt><dd>........................................... ........</dd>


    senza alcuna di distinzione di ciò che ci trova dentro?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Si! Certo!

    Codice PHP:
    $content "<dt>Listino</dt><dd>€ 14,00</dd>";
    $regex '#<dt>Listino</dt><dd>(.*)</dd>#';
    $result preg_match($regex,$content);
    $result $result[1]; 
    Semplicemente questo.


  10. #10
    Utente bannato
    Registrato dal
    Apr 2011
    Messaggi
    113
    ah ok grazie davvero...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.