0

PHP では、次のような長いテキストが与えられます。

昨年司法長官に選出され、将来の知事候補として言及されているケイン氏は、彼女の決定に歓声と拍手を送った聴衆への短い発表で政治的なメモを打ちました。

「私はこのように考えました。知事は大丈夫でしょう」と彼女は言いました。彼女は、誰が「エミリーとエイミーを代表するデイブスとロビーズ」を代表するのだろうか?</p>

「司法長官として、私はあなたを選びます」と彼女は言いました。</p>

引用されたすべての資料を抽出したいと思います。この場合、これらの結果を含む配列です。

"I looked at it this way, the governor’s going to be O.K.,"
"the Daves and Robbies, who represents the Emilys and Amys?"
"As attorney general,"
"I choose you."

仮定:

  • 一致する開始と終了の引用が常に存在します
  • 単純な二重引用符

中引用符、一重引用符、およびその他の特殊なケースも確実に処理できる場合はボーナス ポイントですが、それが簡単になる場合は、単純な二重引用符を想定して自由に行ってください。

はい、サイトで回答を検索しましたが、役立つと思われるものがありましたが、機能するものは見つかりませんでした。最も近いのはこれでしたが、サイコロはありませんでした:

preg_match_all('/"([^"]*(?:\\"[^"]*)*)"/', $content, $matches)
4

5 に答える 5

1

あなたはこれを使うことができます....

$matches = array();
preg_match_all('/(\“.*\”)/U', str_replace("\n", " ", $str), $matches);
print_r($matches);

改行を削除していることに注意してください。これにより、引用符がある行で始まり、別の行で終わる場所で一致が得られます。

于 2013-07-11T21:55:17.167 に答える
1

最も簡単な方法ですが、 strstr() で " の出現を見つけ、その後 substr() を使用して文字列を切り取ることが最善ではありませんでした。

$string = 'Your long text "with quotation"';

$occur = strpos($string, '"'); // the frst occurence of "
$occur2 = strpos($string, '"', $occur + 1); // second occurence of "

$start = $occur; // the start for cut text
$lenght = $occur2 - $occur + 1; // lenght of all quoted text for cut

$res = substr($string, $start, $lenght); // Your quoted text here ex: "with quotation"

そして、これを複数の引用テキストのループに挿入することができます:

   $string = 'Your long text "with quotation" Another long text "and text with quotation"';

    $occur2 = 0; // for doing the first search from begin
    $resString = ''; // if you wont string and not array
    $res = array();
    $end = strripos($string, '"'); // find the last occurence for exit loop

    while(true){
        $occur = strpos($string, '"', $occur2); // after $occur2 change his value for find next occur
        $occur2 = strpos($string, '"', $occur + 1);

        $start = $occur;
        $lenght = $occur2 - $occur + 1;

        $res[] = substr($string, $start, $lenght); // $res may be array
        $resString .= substr($string, $start, $lenght); // or string with concat

        if($end == $occur2)
            break; // brak if is the last occurence

        $occur2++; // increment for search next
    }


    echo $resString .'<br>';
    exit(print_r($res));

結果:

 "with quotation""and text with quotation"
 or
 Array ( [0] => "with quotation" [1] => "and text with quotation" )

正規表現を使用しない簡単な方法です。誰かを助けてください:)(下手な英語でごめんなさい)

于 2013-07-11T22:20:09.473 に答える