テキストファイルをピリオドで終わる文に解析しようとしていますが、ホプキンス氏のような名前は、ピリオドの一致に対して誤った警告をスローしています。
正規表現が「。」を識別するもの しかし、「ミスター」ではありません。
おまけに、私も使っています!文の終わりを見つけるために、私の現在の正規表現は/(!/./であり、私の!も組み込んだ答えが欲しいです。
テキストファイルをピリオドで終わる文に解析しようとしていますが、ホプキンス氏のような名前は、ピリオドの一致に対して誤った警告をスローしています。
正規表現が「。」を識別するもの しかし、「ミスター」ではありません。
おまけに、私も使っています!文の終わりを見つけるために、私の現在の正規表現は/(!/./であり、私の!も組み込んだ答えが欲しいです。
ネガティブルックビハインドを使用します。
(?<!Mr|Mrs|Dr|Ms)\.
これは、、、、またはの後Mr
にない場合にのみピリオドに一致しますMrs
Dr
Ms
<?
$str = "This is Mr. Someone and Mrs. Somebody. They are here to meet Dr. SomeoneElse.";
$str = preg_replace("/(?<!Mr|Mrs|Dr|Ms)\\./", "\n", $str);
echo($str);
?>
//outputs:
This is Mr. Someone and Mrs. Somebody
They are here to meet Dr. SomeoneElse
これは、単純なメカニズムでは実行できません。それは絶望的に曖昧です。文は略語で終わる場合があり、その場合、2つのピリオドで書かれていません。
UnicodeTR29を参照してください。基本的な実装を含むICUオープンソースライブラリも参照してください。
あなたの文の後には常に 2 つのスペースが続きますか? もしそうなら、あなたはそれをチェックすることができます...
/\.\s{2}/
他の文末句読点を組み込む:
/[\.\!\?]\s{2}/
次の単語が大文字であるかどうか、その後に改行が続いているかどうかなど、文の終わりの指標となる可能性のある他のものを確認することもできます。上で指摘したように、期間はあいまいすぎます。