30

私は文字列を持っています:

これは、「残高が $0.10 残っています」というテキストです。End 0

二重引用符の間の文字列を抽出し、テキストのみを (二重引用符なしで) 持つにはどうすればよいですか。

残高は $0.10 です

私は試してみpreg_match_all()ましたが、運がありません。

4

6 に答える 6

71

形式が同じである限り、正規表現を使用してこれを行うことができます。"([^"]+)"柄合わせになります

  • 二重引用符
  • 少なくとも 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
于 2009-06-19T09:28:09.033 に答える
18

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

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

preg_match で使用:

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

戻り値:

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

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

于 2011-08-19T14:50:04.720 に答える
9

これを試して :

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

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

于 2009-06-19T09:28:26.520 に答える
-1

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

$string = '"Your Balance left $0.10", End 0';
preg_match('"([^\\"]+)"', $string, $result);
echo $result[0];
于 2009-06-19T09:26:18.833 に答える
-9

str_replace を使用して引用符をエスケープするだけです:

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

編集:

申し訳ありませんが、2 番目の引用の後にテキストがあったことを確認できませんでした。その場合、最初の引用と 2 番目の引用の 2 つの検索を行い、substr を実行して 2 つの間のすべてのものを追加します。

于 2009-06-19T09:19:00.207 に答える