Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Espressione regolare

  1. #1

    Espressione regolare

    Salve a tutti,
    Vorrei sapere come estrarre tramite espressione regolare ed un ciclo il 999 ed il 666 contenuti in una stringa come questa:

    -999(20|14/10/2005+03:55|)--666(24|16/12/2002+13:12|)-

    Grazie a tutti!
    What is the |\/|atrix?

  2. #2
    Forse mi sono spiegato un pō male...
    Io ho giā un esempio di espressione regolare che nella stringa mi estrae perō il 20 ed il 24 conoscendo rispettivamnte il 999 ed il 666 e cioč:

    $stringa = "-999(20|14/10/2005+03:55|)--666(24|16/12/2002+13:12|)-";
    $id="999";
    if(preg_match_all('#'.$id.'\((.+?)\)#si', $stringa, $results)) {
    echo substr(implode("", $results[1]), 0, -18)."
    ";
    }

    Ora invece avrei bisogno di conoscere in poche parole tutto quello che c'č tra il trattino - e l'apertura di parentesi (

    Spero di essermi spiegato...
    Grazie a tutti.
    What is the |\/|atrix?

  3. #3
    codice:
    preg_match_all("/-(\d+)\(.*?\)-/",$stringa,$results);
    foreach($results[1] AS $value) echo $value."
    ";
    prova cosė
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  4. #4
    L'espressione funziona alla perfezione, Grazie!
    Ho anche un problemuccio con la mia espressione...

    Ipotizzando che ho un campo cosė formato:
    -2(50|17/10/2005+17:18|)--1(70|17/10/2005+17:17|)-
    ed una query cosė composta:
    codice:
    $id=2;
    $query = mysql_query("SELECT id,nome,campo FROM $db_table where campo LIKE '%-$id(%)-%'");
    while($voce = mysql_fetch_array($query)) {
    $nome=$voce['nome'];
    $testo=$voce['campo'];
    if(preg_match_all('#'.$id.'\((.+?)\)#si', $testo, $results)) {
    echo $nome." - ".substr(implode("xxxxxxxxxxxxx", $results[1]), 0, -18)."
    ";
    }
    }
    il risultato č:
    nome2 - 50

    Ma nel caso il campo fosse:
    -2(50|17/10/2005+17:18|)--2(50|17/10/2005+17:17|)-

    Mi si impalla la preg e non mi risponde per come dovrebbe cioč:
    nome2 - 50
    nome2 - 70

    Perchč?
    Mi date una mano?
    Grazie ancora.
    What is the |\/|atrix?

  5. #5
    non ho ben capito cosa devi fare, ma cmq se a \) sostituisci \| ti viene restituito direttamente il numero senza dover usare substr(). Poi riimplementi il resto...
    codice:
    if(preg_match_all('#'.$id.'\((.+?)\|#', $testo, $results))
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  6. #6
    Grazie ancora,
    ma il mio problema č un'altro...
    Ti posto il codice esattamente per come č.
    Avendo nella $db_table1 2 campi (id e nome):
    1 | utente1
    2 | utente2
    3 | utente3

    e nella $db_table2 3 campi (id,nome,campo)

    1 | ProdottoA | -2(50|17/10/2005+17:18|)--1(50|17/10/2005+17:17|)-
    2 | ProdottoB | -2(50|17/10/2005+17:38|)--3(50|17/10/2005+17:30|)-

    facendo:
    codice:
    $query_u = mysql_query("SELECT * FROM $db_table1 order by cognome");
    while($u = mysql_fetch_array($query_u)) {
    $id=$u['id'];
    $query_pu = mysql_query("SELECT id,nome,campo FROM $db_table where campo LIKE '%-$id(%)-%'");
    while($voce = mysql_fetch_array($query_pu)) {
    $testo=$voce['campo'];
    if(preg_match_all('#'.$id.'\((.+?)\)#si', $testo, $results)) {
    echo "$id - ".$u['nome']." - ".$voce['id']." - ".$voce['nome']." - ".substr(implode("xxxxxxxxxxxxx", $results[1]), 0, -18).",00";
    }
    }
    }
    Il risultato č:

    1 - utente1 - 1 - Prodotto A - 50
    3 - utente3 - 2 - Prodotto B - 50
    2 - utente2 - 1 - Prodotto A - 50
    2 - utente2 - 2 - Prodotto B - 50

    č cosi funziona per come dovrebbe!
    Il problema č che quando la $db_table2 č cosė:

    1 | ProdottoA | -2(50|17/10/2005+17:18|)--2(50|17/10/2005+17:17|)-
    2 | ProdottoB | -2(50|17/10/2005+17:38|)--2(50|17/10/2005+17:30|)-

    il sistema si impalla č mi risponde cosė:

    2 - utente2 - 1 - Prodotto A - 50|17/10/2005+17:18|xxxxxxxxxxxxx50
    2 - utente2 - 2 - Prodotto B - 50|17/10/2005+17:38|xxxxxxxxxxxxx50

    invece che rispondermi cosė:

    2 - utente2 - 1 - Prodotto A - 50
    2 - utente2 - 2 - Prodotto B - 50

    Come risolvo?
    What is the |\/|atrix?

  7. #7
    il punto č che fai un implode dentro un substr. I valori inseriti in substr sono statici, quindi non si puō adattare al caso di 2+ prodotti associati allo stesso utente.
    Cmq prova cosė e dimmi se va bene.
    codice:
    if(preg_match_all('#'.$id.'\((.+?)\|#', $testo, $results)) {
    foreach($results[1] AS $price)
    echo "$id - ".$u['nome']." - ".$voce['id']." - ".$voce['nome']." - ".$price.",00"."
    ";
    Ma invece ... strutturare il dB in maniera pių civile?
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  8. #8
    Non so come ringraziarti..
    Ha funzionato!
    Sapresti indicarmi qualche valido link per comiciare ad imparare le espressioni regolari?
    Sto scoprendo giorno dopo giorno che sono sempre di pių la mia bestia nera!!! :maLOL:
    Grazie ancora
    What is the |\/|atrix?

  9. #9
    Link non saprei. Io ho sempre usato come riferimento www.php.net, ma forse č un po' criptico. Ieri mi sono iscritto ad un forum dedicato (http://regexadvice.com/ : indicato da altri utenti qui sul forum di html), puoi provare a guardare lė, ma non so come sia, devo ancora darci un'occhiata.
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  10. #10
    Va bene... Grazie lo stesso! Darō uno sguardo al link che mi hai suggerito..
    What is the |\/|atrix?

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.