Pregunta

Tengo una cadena:

  

Este es un texto, " Su saldo restante $ 0.10 " ;, Fin 0

¿Cómo puedo extraer la cadena entre las comillas dobles y tener solo el texto (sin las comillas dobles):

  

Su saldo restante $ 0.10

He intentado preg_match_all () pero sin suerte.

¿Fue útil?

Solución

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

  • Comillas dobles
  • Al menos una comilla no doble
  • Comillas dobles

Los corchetes alrededor del [^ "] + significa que esa parte se devolverá como un grupo separado.

<?php

$str  = 'This is a text, "Your Balance left <*>.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 <*>.10

Otros consejos

Para todos los que buscan un analizador de cadenas con todas las funciones, intente esto:

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

Uso en preg_match:

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

Devoluciones:

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

Esto funciona con fragmentos de cadena entre comillas simples y dobles.

Prueba esto:

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

Debería obtener todas sus cadenas extraídas en $ resultados [1].

A diferencia de otras respuestas, esto admite escapes, p. " cadena con \ " entre comillas " .

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

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

$string = '"Your Balance left <*>.10", End 0';
preg_match('"([^\\"]+)"', $string, $result);
echo $result[0];

Solo usa str_replace y escapa de la cita:

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

Editar:

Lo siento, no vi que 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ía una substr para agregar todas las cosas entre las dos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top