私は使用しています
explode(".",$mystring)
段落を文に分割します。ただし、これは、!などの異なる句読点で終了した文には適用されません。?:;
単一の文字の代わりに配列を区切り文字として使用する方法はありますか?あるいは、さまざまな句読点を使用して分割する別のきちんとした方法はありますか?
私は試した
explode(("." || "?" || "!"),$mystring)
うまくいけば、それはうまくいきませんでした...
私は使用しています
explode(".",$mystring)
段落を文に分割します。ただし、これは、!などの異なる句読点で終了した文には適用されません。?:;
単一の文字の代わりに配列を区切り文字として使用する方法はありますか?あるいは、さまざまな句読点を使用して分割する別のきちんとした方法はありますか?
私は試した
explode(("." || "?" || "!"),$mystring)
うまくいけば、それはうまくいきませんでした...
PCRE先読み条件preg_split()
と組み合わせて使用すると、実際の句読点をそのままにして、、、、、、、、..が出現するたびに文字列を分割できます。.
;
:
?
!
コード:
$subject = 'abc sdfs. def ghi; this is an.email@addre.ss! asdasdasd? abc xyz';
// split on whitespace between sentences preceded by a punctuation mark
$result = preg_split('/(?<=[.?!;:])\s+/', $subject, -1, PREG_SPLIT_NO_EMPTY);
print_r($result);
結果:
Array
(
[0] => abc sdfs.
[1] => def ghi;
[2] => this is an.email@addre.ss!
[3] => asdasdasd?
[4] => abc xyz
)
否定的な後読みアサーションを挿入することにより、独自の文に分割してはならない略語(Mr.、Mrs.、Dr。、..)のブラックリストを追加することもできます。
$subject = 'abc sdfs. Dr. Foo said he is not a sentence; asdasdasd? abc xyz';
// split on whitespace between sentences preceded by a punctuation mark
$result = preg_split('/(?<!Mr.|Mrs.|Dr.)(?<=[.?!;:])\s+/', $subject, -1, PREG_SPLIT_NO_EMPTY);
print_r($result);
結果:
Array
(
[0] => abc sdfs.
[1] => Dr. Foo said he is not a sentence;
[2] => asdasdasd?
[3] => abc xyz
)
できるよ:
preg_split('/\.|\?|!/',$mystring);
または(より単純):
preg_split('/[.?!]/',$mystring);
最終結果の句読点が実際に必要であると仮定して、次のことを試しましたか。
$mystring = str_replace("?","?---",str_replace(".",".---",str_replace("!","!---",$mystring)));
$tmp = explode("---",$mystring);
これにより、句読点がそのまま残ります。
preg_split('/\s+|[.?!]/',$string);
考えられる問題は、途中で新しい行に分割される可能性があるため、電子メールアドレスがある場合です。
preg_splitを使用し、[\。|\?!]のような正規表現を指定して分割します
$mylist = preg_split("/[.?!:;]/", $mystring);
分解するために複数の区切り文字を使用することはできません。それpreg_split();
が目的です。ただし、それでも区切り文字で爆発するため、句読点なしで文が返されます。preg_splitをさらに一歩進めてフラグを立て、PREG_SPLIT_DELIM_CAPTUREを使用して独自の要素でそれらを返すことができます。次に、ループを実行して、返された配列の文とそれに続く句読点を内破するか、次を使用しますpreg_match_all();
。
preg_match_all('~.*?[?.!]~s', $string, $sentences);
あなたが試すことができますpreg_split
$sentences = preg_split("/[.?!:;]+/", $mystring);
これにより句読点が削除されることに注意してください。先頭または末尾の空白も削除したい場合
$sentences = preg_split("/[.?!:;]+\s+?/", $mystring);