Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Dividere una stringa in piu' parti

    Salve a tutti,

    ho un problema nel dividere una stringa in piu' parti, in modo da rielaborarla e ricostruirla in seguito. Questi sono dei possibili esempi di stringhe:

    Pippo + Pluto (Paperino - Paperoga)
    Paperon de' Paperoni - Gastone (Qui + Quo + Qua)

    Allora: io voglio dividere la stringa usando come delimitatori +, -, ( e ). La sequenza di questi quattro caratteri non e' fissa, non esistono altri possibili e non e' detto che ci siano tutti. Ogni sottostringa viene cercata in un database, e se e' presente, viene aggiunto un link ad un sito web.

    Al momento ho visto 3 soluzioni:

    - strtok($stringa_originale, "+-()");
    - split('[)+(-]', $stringa_originale); // usando le regular expression
    - un metodo ricorsivo di explode() che al momento e' un po' difficile dirlo;

    I primi due metodi funzionano alla perfezione, pero' non riesco a sapere quale dei quattro delimitatori e' stato usato e non posso ricostruire la stringa nel modo giusto.

    Per esempio: Pippo + Pluto (Paperino - Paperoga) mi ritorna un array con: 0=> Pippo, 1=> Pluto, 2=>Paperino, 3=>Paperoga. Pero' in questo modo, non so piu' quale dei delimitatori e' stato trovato e quindi non saprei come rimetterlo.

    L'unica che mi viene e' che per ogni stringa dell'array, cerco il primo carattere non di spaziatura successivo (quindi per Pippo e' +, per Pluto e' (, etc...)

    Qualcuno ha capito quello che ho detto e ha una soluzione migliore? (Se rispondete si' alla prima domanda, siete gia' dei maghi...)

    Ciao a tutto il forum....
    Dave

  2. #2
    Potresti usare preg_match_all con il pattern [+-\(\)] ed il flag PREG_OFFSET_CAPTURE in modo da identificare tutti gli "operatori" e la loro posizione all'interno della stringa. Poi ti basta un loop per estrarre gli altri elementi della stringa.

  3. #3
    Che cosa fantastica... grazie grazie grazie!!

    Una sola cosa, pero' che non ho capito, ma ho risolto... tu mi avevi detto di usare il pattern [+-\(\)], che pero' non mi andava. Ho usato [\(\)\+\-] (cambiando l'ordine e mettendo sempre gli escape) e funziona alla perfezione.

    Per il resto e' tutto come mi hai detto. Magari questa e' la volta buona che mi studio per bene le espressioni regolari...

    Grazie ancora
    Dave

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.