2010-03-08 21 views
20

Come posso abbinare tutti i caratteri tra i 2 caratteri specificati, dicono " " -> da sdfsf " 12asdf " sdfregex trovare personaggi tra ""

voglio ottenere solo 12asdf.

+1

Cosa speravate di ottenere? Non sta restituendo lo spazio bianco principale? Mostraci la regex che stai utilizzando e metti i risultati del tuo esempio in un blocco di codice, per favore. – Robusto

risposta

61

È possibile utilizzare il seguente modello per ottenere tutto tra " ", tra cui la testa e di coda spazi bianchi:

"(.*?)" 

o

"([^"]*)" 

Se si desidera catturare tutto tra il "" escluso gli spazi bianchi iniziali e finali che puoi fare:

"\s*(.*?)\s*" 

o

"\s*([^"]*)\s*" 
+0

concordato. Assicurati di cercare tutto ciò che puoi trovare sulle espressioni "non-golose" (contro "avide"). Dovrebbe essere una lettura interessante se ancora non lo sai. E sicuramente renderà più facile la tua vita con espressioni regolari se conosci la differenza. – exhuma

0

È possibile utilizzare preg_match(/"([^"]*)"/,$input,$matches);. $matches[1] avrà ciò che desideri.

5

vi suggerisco di utilizzare

(?<=")(?:\\.|[^"\\])*(?=") 

Questo corrisponderà solo ciò che si trova tra le virgolette (non le virgolette stessi) e anche di gestire correttamente le virgolette escape all'interno della vostra stringa.

Quindi in "She said, \"Hi!\"", corrisponderà a She said, \"Hi!\".

Se stai usando JavaScript o Ruby (che lei non ha citato) e quindi non possono usare lookbehind, utilizzare

"((?:\\.|[^"\\])*)" 

e lavorare con il gruppo di cattura n. 1.

+0

Che non ha gestito citazioni con escape per me o su questa pagina https://regex101.com/ – Don

+0

@Don: Puoi fornire il link alla regex non funzionante (fai clic su Salva regex e pubblica il link)? –

-1
[^"].*[^"] 

Se si inserisce: "Elie", darà Elie (nota: senza virgolette)