Вопрос по php, string – PHP, чтобы извлечь строку из двойной кавычки

22

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

This is a text, "Your Balance left $0.10", End 0

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

Your Balance left $0.10

я пыталсяpreg_match_all() но без удачи.

Ты можешь найтиs($str)->between('"', '"') полезно, как в эта автономная библиотека. caw

Ваш Ответ

6   ответов
55

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

Дважды цитата По крайней мере, одна не двойная кавычка Дважды цитата

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

<?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
+ 1 просто и мило diEcho
15

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

Используйте в 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'
)

Это работает с одиночными и двойными кавычками.

Работает, но есть ли способ исключить сами кавычки из возвращаемой строки? 3zzy
0

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

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

Попробуй это

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

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

Это фактически единственный, который работает, когда у вас есть несколько значений между кавычками в одной строке. Например: (a: 2: {i: 0; s: 3: «149»; i: 1; s: 3: «143»;}) + самое чистое решение. Warre Buysse
+ 1 За предоставление решения с помощью preg_match_all demongolem
5

он поддерживает экранирование, например"string with \" quote in it".

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

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

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

Редактировать

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

Похожие вопросы