Perché ricevo risultati vuoti nel mio RegExp?
-
19-09-2019 - |
Domanda
Sto cercando di analizzare il mio URL in diverse parti che utilizzano questo RegExp:
([\w\\.-]*)
Dato un esempio di URL http://www.foo.com/bar/baz ottengo questi risultati da preg_match_all ():
Array
(
[0] => Array
(
[0] => http
[1] =>
[2] =>
[3] =>
[4] => www.foo.com
[5] =>
[6] => bar
[7] =>
[8] => baz
[9] =>
)
)
Sembra che analizza qualsiasi carattere non valido in un elemento vuoto.
Come posso risolvere questo?
Soluzione
Utilizzando *
state catturando gruppi vuoti - uso +
invece:
([\w\.-]+)
Suppongo che il \ in più in RE è perché hai dentro una stringa tra virgolette.
Altri suggerimenti
questo può fare ciò che si vuole: ([\ w .-] + |.) Ciò corrisponderà a tutto parte dell'indirizzo.
Sei sicuro di volerlo \\.
?
In altre parole, da quello che hai postato, sembra aver scampato un backslash invece del periodo, come probabilmente hai intenzione. EDIT:. Per ordine, nessun danno per rimuovere fuga ridondante, ma questo non è il vero problema [come sottolineato da Blixt - grazie]
Consigliamo vivamente il regolatore come strumento di debug regex [Anche se la sua base di .NET regex ideale quindi non sta per il lavoro PHP - ma il punto generale che ci sono strumenti che vi permetterà di identificare la base su cui sta operando corrispondenza]
Ancora non capisco quello che vuoi con i backslash nella gamma. Puoi pubblicare l'espressione regolare finale si utilizza nella domanda per favore? E dispiace per le distrazioni che questa risposta è stato!
EDIT:. Come ha sottolineato Blixt, periodo doesnt agire come un metachar come ho suggerito