2016-02-04 25 views
5

Capisco che \ s è usato per abbinare il carattere dello spazio bianco, ma a volte vedo "\\ s" è usato in preg match e funziona bene. Ad esempio:Regex PHP: Differenza tra s e \ s

if (preg_match("/\\s/", $myString)) { 
    // there are spaces 
} 

if (preg_match("/\s/", $myString)) { 
    // there are spaces 
} 

C'è qualche differenza tra due blocchi di codice sopra indicati?

+0

@Tushar: Se "\ s" => regex s, allora perché preg_match ("/ \ s /", "ciao ciao") = 1? – joHN

+0

@joHN: l'output è corretto per '("/\ s/"," ciao ciao ") = 1' perché c'è solo uno spazio bianco. la prima espressione proverà ad abbinare '\ s' nella stringa..sua qui https://regex101.com/ – rock321987

+0

@Tushar: prova var_dump (preg_match ("/\\ s/"," \ shello ", $ matches)); – joHN

risposta

4

Cercando di dare un senso al testo dal manuale.

http://php.net/manual/en/regexp.reference.escape.php

singole e doppie stringhe PHP citati hanno un significato speciale di backslash. Pertanto, se \ deve essere associato ad un'espressione regolare \\, allora "\\\\" o "\\\\" devono essere utilizzati nel codice PHP.

Potrei non essere corretto ma ci vado.

Quando si utilizza qualcosa come

preg_match("/\\s/", $myString) 

quello che sta facendo è la conversione \\ a \, che a sua volta rende la stringa da \ s in tal modo si comporta normalmente, vale a dire il suo significato non cambia e il regex creata è '/ \ s /' interno, che corrisponde "spazi"

per abbinare \ s in una stringa che avrebbe dovuto fare qualcosa come segue

preg_match("/\\\\s/", $myString) 

Quindi la risposta è \ s o \\ s nel la stringa regex non fa alcuna differenza, personalmente penso che l'uso di \ s sia più semplice e facile da capire.

+0

Anche io uso virgolette singole per specificare il modello, non ho visto alcuna differenza. Non intendevo corrispondere a "\ s", ma per abbinare lo spazio. Quindi non c'è differenza nell'uso di \ s e \\ s (virgolette doppie o singole)? – joHN

+0

@joHN è ciò che dice il manuale, non importa per quanto riguarda le virgolette doppie o singole, una barra rovesciata ha un significato speciale per la stringa PHP, sfugge a tutti i caratteri non alpha. backslash essendo un non-alpha viene convertito in backslash, e quando il compilatore vede un "\" seguito da "s" prova a trovare gli spazi – codisfy

+0

, grazie. – joHN

0
\s - to match all white spaces 

\\s - to match all white spaces 

\\\s - to match all \s 
+0

non ho capito, potresti mostrarmi una stringa di esempio in cui entrambi i pattern restituiranno risultati diversi? – joHN

+0

puoi verificarlo su http://regexr.com/ –

+0

Prova nel tuo sistema locale, gli strumenti online non mostrano correttamente l'unicità. Non ha alcuna differenza, penso. – joHN

Problemi correlati