php для извлечения строки из двойной кавычки

У меня есть строка:

Это текст, "Ваш баланс слева $0.10", конец 0

Как я могу извлечь строку между двойными кавычками и иметь только текст (без двойных кавычек):

Ваш баланс оставил $ 0.10

Я пробовал preg_match_all() но не повезло.

6 ответов


пока формат остается прежним, вы можете сделать это с помощью регулярного выражения. "([^"]+)" будет соответствовать шаблону

  • двойной кавычки
  • по крайней мере один двойной кавычки
  • двойной кавычки

скобки вокруг [^"]+ означает, что эта часть будет возвращена в отдельную группу.

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

для всех, кто ищет полнофункциональный парсер строк, попробуйте следующее:

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

использовать в функции preg_match:

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

возвращает:

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

это работает с одиночными и двойными цитирует фрагменты строк.


попробуйте это :

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

вы должны получить все извлеченные строки в $results[1].


В отличие от других ответов, это поддерживает escapes, например "string with \" quote in it".

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

регулярное выражение '"([^\"]+)"' будет матч между двумя двойными кавычками.

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

просто используйте str_replace и избежать цитаты:

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

изменить:

извините, не видел, что был текст после 2-й цитаты. В этом случае я бы просто 2 поиска, один для первой цитаты и один для 2-й цитаты, а затем сделать substr, чтобы добавить все вещи между ними.