web-dev-qa-db-ja.com

二重引用符から文字列を抽出するphp

文字列があります:

これは、「残高が$ 0.10で残りました、終了0です。

二重引用符の間にある文字列を抽出して、テキストのみ(二重引用符なし)にする方法はありますか。

残高は$ 0.10でした

私はpreg_match_all()を試しましたが、うまくいきませんでした。

25
conandor

形式が同じである限り、正規表現を使用してこれを行うことができます。 "([^"]+)"はパターンに一致します

  • 二重引用符
  • 少なくとも1つの非二重引用符
  • 二重引用符

[^"]+を囲む角括弧は、その部分が別のグループとして返​​されることを意味します。

<?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
57
Tom Haigh

フル機能の文字列パーサーを探しているすべての人がこれを試してください。

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

Preg_matchで使用:

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

戻り値:

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

これは、単一引用符と二重引用符で囲まれた文字列フラグメントで機能します。

16
user426486

これを試して :

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

抽出したすべての文字列を$ results [1]に取得する必要があります。

9
Arkh

他の回答とは異なり、これはエスケープをサポートします。 "string with \" quote in it"

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

正規表現'"([^\\"]+)"'は、2つの二重引用符の間のすべてに一致します。

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