0

preg_split 正規表現を使用して、文を配列に分割しています。私はこれを成功させることができます。ただし、preg_replace に検索するように指示しているパターンの一部は、テキスト自体の一部です。そのため、テキストの一部も削除されています。パターンを配列に再挿入する方法はありますか? たとえば、preg_spit にピリオドとその後の大文字を検索するように指示すると、配列から大文字が削除されますが、これは望ましくありません。

これはコードです:

$line = preg_split("@[\.\?\!\:][\W]+[A-Z]@"

サンプル文字列:

これが一文です。これは文2ですか?3文目です!これは文 4 です。これは文 5 です。これはセンテンス 6 です。これは米国のセンテンス 6 でもあります。チャック・ヘーゲル国防長官は、バージニア州民主党のゲリー・コノリー議員が、米国の行動がなければ、別のシリア化学攻撃の可能性について尋ねられたとき、「非常に高い」とケリーの発言を繰り返した.

これを回避する方法はありますか?

ありがとう

4

1 に答える 1

2

前向きな先読みを使用すると、これはうまくいくはずです....

$line = preg_split("[\.\?\!\:][\W]+(?=[A-Z])");

"(?=" と ")" の間のすべてが一致しますが、結果には含まれません。最後の括弧の後に適切な繰り返し演算子を追加します。

「正規表現のルックアラウンド、ルックアヘッド、ルックビハインド、アサーション」を検索すると、これらの機能を正しく使用する方法に関する多くの情報が得られます:-)

于 2013-09-04T22:24:58.290 に答える