Вопрос

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

Это сообщение: "На вашем балансе осталось $ 0.10", Конец 0

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

На вашем балансе осталось $0.10

Я пытался preg_match_all() но безуспешно.

Это было полезно?

Решение

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

  • Двойные кавычки
  • По крайней мере, одна не содержащая двойных кавычек
  • Двойные кавычки

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

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

Другие советы

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

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

Использовать в 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].

В отличие от других ответов, он поддерживает экранирование, например " строка с \ " указывайте в нем " .

$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, чтобы добавить все данные между ними.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top