Frage

Ich habe eine Zeichenfolge:

  

Dies ist ein Text, "Ihr Kontostand $ 0.10 links", End 0

Wie kann ich die Zeichenfolge zwischen den doppelten Anführungszeichen zu extrahieren und haben nur den Text (ohne die Anführungszeichen):

  

Ihre Balance links $ 0.10

Ich habe versucht, preg_match_all() aber ohne Glück.

War es hilfreich?

Lösung

Solange das Format gleich bleibt können Sie tun dies einen regulären Ausdruck. "([^"]+)" wird mit dem Muster übereinstimmen

  • Double-Zitat
  • Mindestens ein nicht-doppelte Anführungszeichen
  • Double-Zitat

Die Klammern um den [^"]+ bedeuten, dass der Teil als eine separate Gruppe zurückgeführt wird.

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

Andere Tipps

Für alle nach einem vollwertiger String-Parser Jagd, versuchen Sie dies:

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

Verwenden Sie 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'
)

Das funktioniert mit Einzel- und Doppel Anführungszeichen Fragmenten.

Versuchen Sie folgendes:

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

Sie sollten alle extrahierten Zeichenkette in $ Ergebnisse erhalten [1].

Im Gegensatz zu anderen Antworten, dies unterstützt entkommt, z.B. "string with \" quote in it".

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

Der reguläre Ausdruck '"([^\\"]+)"' wird alles zwischen zwei doppelten Anführungszeichen entsprechen.

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

Just str_replace verwenden und das Zitat entkommen:

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

Edit:

Sorry, didnt sehen, dass es Text nach dem zweiten Zitat war. In diesem Fall würde ich einfach zu 2 sucht, eine für das erste Zitat und eine für das zweite Zitat, und tun dann ein substr extra alle Sachen zwischen den beiden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top