2010-02-10 18 views

risposta

7

Hai provato il modificatore di s? Significa 'trattare come se una linea singola. 'm' abilita l'uso degli inizi e delle terminazioni di^e $ line da utilizzare.

+0

Ah IC, proverò questo @work domani. Ancora una domanda, come posso abbinare newline, spazi o tabs? Finora ho escogitato "[\\ n \\ t] *", che è corretto? –

+0

Basta usare '\ s', che significa qualsiasi carattere di spazio. –

+0

\ s corrisponde a 'spazio bianco' (che significa \ t e spazio) e credo che possa includere \ n anche quando usato con 's'. – ziya

45

Maxwell Troy Milton King ha ragione, ma dal momento che la sua risposta è un po 'breve, inserirò anche questo e fornirò alcuni esempi da illustrare.

Innanzitutto, il meta carattere . per impostazione predefinita NON corrisponde alle interruzioni di riga. Questo è vero per molte implementazioni regex, incluso il sapore di PHP. Detto questo, prendere il testo:

$text = "Line 1\nLine 2\nLine 3"; 

e la regex

'/.*/' 

quindi l'espressione regolare corrisponderà solo Line 1. Guardate voi stessi:

preg_match('/.*/', $text, $match); 
echo $match[0]; // echos: 'Line 1' 

dal momento che il .* "ferma matching" al \n (nuova linea char). Se si vuole lasciarlo partita Formazione rompe pure, aggiungere il s-modificatore (aka DOT-ALL modificatore) alla fine della vostra regex:

preg_match('/.*/s', $text, $match); 
echo $match[0]; // echos: 'Line 1\nLine 2\nLine 3' 

Ora circa il m-modificatore (multilinea): ciò consentirà allo ^ di corrispondere non solo all'inizio della stringa di input, ma anche all'inizio di ogni riga. Lo stesso con $: lascerà che lo $ corrisponda non solo alla fine della stringa di input, ma anche alla fine di ogni riga.

Un esempio:

$text = "Line 1\nLine 2\nLine 3"; 
preg_match_all('/[0-9]$/', $text, $matches); 
print_r($matches); 

che corrisponderà solo il 3 (alla fine dell'input). Ma:

ma permettendo al m-modificatore:

$text = "Line 1\nLine 2\nLine 3"; 
preg_match_all('/[0-9]$/m', $text, $matches); 
print_r($matches); 

tutte le cifre (singolo) alla fine di ogni riga ('1', '2' e '3') sono abbinati.

+3

+1 fantastica risposta – blak3r

Problemi correlati