php eine Zeichenfolge aus doppelten Anführungszeichen zu extrahieren
-
06-07-2019 - |
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.
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.