質問

文字列があります:

これはテキストです、「残高は $0.10 です」、終了 0

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

残高は $0.10 残っています

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

役に立ちましたか?

解決

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

  • 二重引用符
  • 少なくとも 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

他のヒント

フル機能の文字列パーサーを探しているすべての人のために、これを試してください:

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

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]に取得する必要があります。

他の回答とは異なり、これはエスケープをサポートしています。 &quot; string with \&quot;引用してください。

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

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

$string = '"Your Balance left <*>.10", End 0';
preg_match('"([^\\"]+)"', $string, $result);
echo $result[0];

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

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

編集:

申し訳ありませんが、2番目の引用の後にテキストがあることはわかりませんでした。その場合、最初の引用と2番目の引用の2つの検索を実行し、2つの間のすべての要素を追加するsubstrを実行します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top