Domanda

Ho una stringa:

  

Questo è un testo, "Il tuo saldo ha lasciato $ 0,10", Fine 0

Come posso estrarre la stringa tra virgolette doppie e avere solo il testo (senza le virgolette doppie):

  

Il saldo ha lasciato $ 0,10

Ho provato preg_match_all () ma senza fortuna.

È stato utile?

Soluzione

Finché il formato rimane lo stesso, puoi farlo usando un'espressione regolare. " ([^ "] +) " corrisponderà al modello

  • Fare doppio citazione
  • Almeno una virgoletta non doppia
  • Fare doppio citazione

Le parentesi attorno a [^ "] + indicano che quella parte verrà restituita come gruppo separato.

<?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

Altri suggerimenti

Per tutti coloro che cercano un parser di stringhe completo, prova questo:

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

Usa in preg_match:

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

Returns:

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

Funziona con frammenti di stringa tra virgolette singole e doppie.

Prova questo:

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

Dovresti ottenere tutte le stringhe estratte in $ results [1].

A differenza di altre risposte, supporta le fughe, ad es. " stringa con \ " citazione in esso " .

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

L'espressione regolare '" ([^ \\ "] +) "' corrisponderà a qualsiasi cosa tra due virgolette doppie.

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

Basta usare str_replace e sfuggire alla citazione:

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

Modifica:

Siamo spiacenti, non ho visto il testo dopo la seconda citazione. In quel caso, farei semplicemente 2 ricerche, una per la prima citazione e una per la seconda citazione, e poi farei un substr per aggiungere tutte le cose tra i due.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top