How to extract a string from double quotes?

58,200

Solution 1

As long as the format stays the same you can do this using a regular expression. "([^"]+)" will match the pattern

  • Double-quote
  • At least one non-double-quote
  • Double-quote

The brackets around the [^"]+ means that that portion will be returned as a separate group.

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

Solution 2

For everyone hunting for a full featured string parser, try this:

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

Use 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'
)

This works with single and double quoted string fragments.

Solution 3

Unlike other answers, this supports escapes, e.g. "string with \" quote in it".

$content = stripslashes(preg_match('/"((?:[^"]|\\\\.)*)"/'));
Share:
58,200
conandor
Author by

conandor

Updated on August 06, 2021

Comments

  • conandor
    conandor almost 3 years

    I have a string:

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

    How can I extract the string in between the double quotes and have only the text (without the double quotes):

    Your Balance left $0.10

    I have tried preg_match_all() but with no luck.