Вопрос по string, php – Разбить абзац на предложения в PHP
Я использую
<code>explode(".",$mystring) </code>
разделить абзац на предложения. Однако это не охватывает предложения, которые были заключены с другой пунктуацией, такой как! ? :;
Есть ли способ использовать массив в качестве разделителя вместо одного символа? Альтернативно есть ли другой аккуратный способ расщепления с использованием различных знаков препинания?
Я старался
<code>explode(("." || "?" || "!"),$mystring) </code>
надеюсь, но это не сработало ...
preg_split()
в сочетании сПредварительное состояние PCRE разбить строку после каждого вхождения.
, ;
, :
, ?
, !
.., сохраняя фактическую пунктуацию без изменений:
Код:
$subject = 'abc sdfs. def ghi; this is [email protected]! 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 [email protected]!
[3] => asdasdasd?
[4] => abc xyz
)
Вы не можете иметь несколько разделителей для разнесения. Вот чтоpreg_split();
для. Но даже тогда он взрывается в разделителе, поэтому вы получите возвращенные предложения без знаков препинания.
Вы можете сделать preg_split на шаг дальше и пометить его, чтобы он возвращал их в своих собственных элементах с помощью PREG_SPLIT_DELIM_CAPTURE, а затем запустить некоторый цикл, чтобы ввести предложение и следующий знак препинания в возвращаемом массиве, или просто использоватьpreg_match_all();
:
preg_match_all('~.*?[?.!]~s', $string, $sentences);