Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922

    preg_replace. Aggiunta spazio dopo punteggiatura

    Salve.
    Avrei bisogno del vostro aiuto per modificare un'espressione regolare. In pratica, data una stringa, vorrei aggiungere uno spazio oltre che dopo il punto, anche in presenza di punti interrogativi o di domanda.

    L'espressione di partenza è questa.
    $str=preg_replace("/\.(\w)/", ". \\1", $str);

    Come va modificata? Grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Aggiungendo una preg per ciascun carattere di punteggiatura funziona.
    codice:
    $str=preg_replace("/\.(\w)/", ". \\1", $str);
    $str=preg_replace("/\?(\w)/", "? \\1", $str);
    $str=preg_replace("/\!(\w)/", "! \\1", $str);
    è possibile usarle tutte assieme? :master:

  3. #3
    Prova con
    codice:
    $str=preg_replace("/(\.|\?|\!)(\w)/i", "\\1 \\2", $str);

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Grazie mille cubalibre. Funziona. Ho eliminato /i perchè credo sia superfluo in questo caso.

    La prima parte dell'espressione l'ho capita. Hai usato il pipe per delimitare le varie alternative da ricercare però fatico a comprendere il funzionamento di \\1 \\2.
    Qualcuno che mi schiarisca le idee?

  5. #5
    Sì /i se cerchi sono quei 3 caratteri non serve, se la sostituzione la devi fare più volte prova a mettere /S

    Per quanto riguarda "\\1 \\2", è molto semplice
    "\\1" sarà sostituito dal valore trovato nel pattern (. or ? or !)
    "\\2" sarà sostituito da tutto quel che segue

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da cubalibre810
    Sì /i se cerchi sono quei 3 caratteri non serve, se la sostituzione la devi fare più volte prova a mettere /S

    Per quanto riguarda "\\1 \\2", è molto semplice
    "\\1" sarà sostituito dal valore trovato nel pattern (. or ? or !)
    "\\2" sarà sostituito da tutto quel che segue
    Ti ringrazio ancora per la spiegazione. Arriverà il giorno in cui capirò sti geroglifici. (almeno spero )

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Perdonate l'ignoranza, ma "\\1 \\2" e "$1 $2" si equivalgono o esiste qualche differenza che mi sfugge?

  8. #8
    La funzione ricerca in testo i criteri impostati in espressione_regolare. Se riconosce dei testi, li sostituisce con sostituto. Se si specifica limite, verranno sostituiti solamente limite testi riconosciuti; se viene omesso, oppure impostato a -1, verranno sostituiti tutti i testi riconosciuti.

    Il parametro sostituto può contenere riferimenti nella forma di \\n, oppure, a partire dalla versione 4.0.4 di PHP, $n , con la preferenza per la seconda sintassi. Questo tipo di riferimento verrà sostituito dal testo che soddisfa l'n -esimo criterio presente in espressione_regolare . Sono ammessi numeri compresi tra 0 e 99 inclusi. Il valore 0 (\\0 oppure $0) si riferisce al testo riconosciuto tramite tutta l'espressione regolare passata. Nel conteggio dei criteri di riconoscimento presenti, sono contate le parentesi aperte da sinistra verso destra partendo da 1.

    Quando si lavora con un criterio di sostituzione in cui un riferimento all'indietro è immediatamente seguito da un'altro numero (ad esempio un numero che segue immediatamente il criterio riconosciuto), non si possono utilizzare le solite notazioni, \\1, per i riferimenti all'indietro. Ad esempio, il testo \\11 confonderebbe preg_replace() poichè non saprebbe se si desidera il riferimento all'indietro \\1 seguito dal numero 1, oppure se è desiderato il riferimento \\11 seguito da niente. In questi casi la soluzione consiste nell'uso di \${1}1. In questo modo si crea un riferimento all'indietro $1 isolato dal numero 1.

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Per la serie, RTFM.
    Ti ringrazio, mi era sfuggito.

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.