2010-03-08 19 views
20

¿Cómo se puede hacer coincidir todos los caracteres entre 2 caracteres especificados, dicen " " -> de sdfsf " 12asdf " sdfexpresiones regulares encontrar caracteres entre ""

quiero conseguir 12asdf solamente.

+1

¿Qué estaba esperando conseguir? ¿No está devolviendo el espacio en blanco líder? Muéstranos la expresión regular que estás utilizando y pon los resultados de tu ejemplo en un bloque de código, por favor. – Robusto

Respuesta

61

Puede utilizar el siguiente patrón de conseguir todo lo que entre " ", incluyendo el anterior y posterior de los espacios en blanco:

"(.*?)" 

o

"([^"]*)" 

Si desea capturar todo lo que entre el "" excluyendo los espacios en blanco iniciales y finales que puede hacer:

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

o

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

De acuerdo. Asegúrese de buscar cualquier cosa que pueda encontrar en expresiones "no codiciosas" (en lugar de "codiciosas"). Debería ser una lectura interesante si aún no lo sabes. Y seguramente hará que su vida con expresiones regulares sea más fácil si conoce la diferencia. – exhuma

0

Puede usar preg_match(/"([^"]*)"/,$input,$matches);. $matches[1] tendrá lo que quieras.

5

le sugiero que utilice

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

Esto sólo coincidirá con lo que está entre las comillas (no los propios comillas) y también manejar correctamente comillas escapadas dentro de su cadena.

En "She said, \"Hi!\"", coincidirá con She said, \"Hi!\".

Si está utilizando JavaScript o Ruby (que usted no mencionó) y por lo tanto no se puede utilizar de búsqueda hacia atrás, utilice

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

y trabajar con el grupo de captura no. 1.

+0

Eso no manejó comillas escapadas para mí o en esta página https://regex101.com/ – Don

+0

@Don: ¿Puede proporcionar el enlace a la expresión regular que no funciona (haga clic en Guardar expresión regular y publicar ese enlace)? –

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

Si introduce: "Elie", que dará a Elie (nota: sin comillas)

Cuestiones relacionadas