0

テキストをスペース、句読点、改行で配列に分割する必要があります。サンプルテキストは次のとおりです。

男性のジャケットは緑色です。現代史上最大のスターである彼は、非常に速く自転車に乗ります (時速 230 km)。それはどのように可能ですか?彼はどんなバイクを使っていますか。彼のバイクのセミオートマチック ギアは非常に高価ですが、その速度に到達するのに大きく役立ちます。彼が世界最速だと主張する人もいます。「彼が自転車に乗っているのを見た!」ジョン・ディア氏が語る。「彼が設定した速度は時速 133.78 キロメートルです」とは信じがたい話です。欺くように聞こえます。

私はすでにそれを行う正規表現を持っています:

preg_split('/(?<=\s)|(?<=\w)(?=[.,:;!?()-])|(?<=[.,!()?\x{201C}])(?=[^ ])/u', $text);

ただし、現在は次semi-automaticの単語を 2 つの単語に分割していますが、1 つの単語のままにしておく必要があります。のように、ダッシュの横にスペースがある場合semi - automatic、これは 3 つの単語になります。この正規表現がどのように機能しているのかよくわからないので、助けていただければ幸いです。

2 つ目の問題は、テキストに改行が含まれている場合、改行をキャッチするだけでなく、冗長な要素が作成されることです。を参照してください- 要素 [8] と [9]。要素 [8] は冗長です。どうすれば回避できますか?

4

2 に答える 2

0

これを試すことができます:

preg_split('/[^\PP.-]|(?<=\s)-(?=\s)|\s+|\.(?!\d)/u', $str, null, PREG_SPLIT_NO_EMPTY);
于 2013-11-12T14:42:36.537 に答える