2009-06-19 35 views
17

tengo una cadena:php para extraer una cadena de comillas dobles

Se trata de un texto, "su saldo dejó $ 0,10", Fin 0

¿Cómo puedo extraer la cadena en el medio las comillas dobles y tienen sólo el texto (sin las comillas):

su saldo dejó $ 0,10

He intentado preg_match_all() pero sin suerte.

+0

Puede encontrar ['s ($ str) -> between ('"', '"')'] (https: // github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php # L412) útil, como se encuentra en [esta biblioteca independiente] (https://github.com/delight-im/PHP-Str). – caw

Respuesta

48

Mientras el formato permanezca igual, puede hacerlo utilizando una expresión regular. "([^"]+)" coincidirá con el patrón

  • doble cita
  • Al menos uno no comilla doble
  • doble cita

los corchetes de la [^"]+ significa que esa porción se devuelve como un grupo separado.

<?php 

$str = 'This is a text, "Your Balance left $0.10", End 0'; 

//forward slashes are the start and end delimeters 
//third parameter is the array we want to fill with matches 
if (preg_match('/"([^"]+)"/', $str, $m)) { 
    print $m[1]; 
} else { 
    //preg_match returns the number of matches found, 
    //so if here didn't match pattern 
} 

//output: Your Balance left $0.10 
+0

+1 simple y dulce – diEcho

-7

Sólo tiene que utilizar str_replace y escapar de la cita:

str_replace("\"","",$yourString); 

Editar:

Lo sentimos, no vimos que no había texto después de la segunda cita. En ese caso, simplemente haría 2 búsquedas, una para la primera cita y otra para la segunda cita, y luego haré un substrato para agregar todas las cosas entre las dos.

0

La expresión regular '"([^\\"]+)"' coincidirá con cualquier cosa entre dos comillas dobles.

$string = '"Your Balance left $0.10", End 0'; 
preg_match('"([^\\"]+)"', $string, $result); 
echo $result[0]; 
9

Prueba esto:

preg_match_all('`"([^"]*)"`', $string, $results); 

usted debe conseguir todas sus cadenas extraídas en $ resultados [1].

+0

+1 Para proporcionar una solución con preg_match_all – demongolem

+1

Este es, de hecho, el único que funciona cuando tiene múltiples valores entre comillas en una cadena. Como el siguiente: (a: 2: {i: 0; s: 3: "149"; i: 1; s: 3: "143";}) + la solución más limpia. –

5

A diferencia de otras respuestas, esto admite escapes, p. "string with \" quote in it".

$content = stripslashes(preg_match('/"((?:[^"]|\\\\.)*)"/')); 
13

Para todo el mundo a la caza de un analizador completa cadena de las funciones, intente esto:

(?:(?:"(?:\\"|[^"])+")|(?:'(?:\\'|[^'])+')); 

uso en preg_match:

$haystack = "something else before 'Lars\' Teststring in quotes' something else after"; 
preg_match("/(?:(?:\"(?:\\\\\"|[^\"])+\")|(?:'(?:\\\'|[^'])+'))/is",$haystack,$match); 

Devuelve:

Array 
(
    [0] => 'Lars\' Teststring in quotes' 
) 

Esto funciona con cadena simple y doble c ragments.

+3

Funciona, pero ¿hay alguna forma de excluir las comillas de la cadena devuelta? – 3zzy

Cuestiones relacionadas