Я использую
explode(".",$mystring)
разделить абзац на предложения. Однако это не распространяется на предложения, которые были заключены с различными пунктуациями, такими как! ? :;
Есть ли способ использовать массив как разделитель вместо одного символа? Альтернативно есть ли еще один опрятный способ расщепления с использованием различной пунктуации?
Я пытался
explode(("." || "?" || "!"),$mystring)
надеюсь, но это не сработало …
Ты можешь сделать:
preg_split('/\.|\?|!/',$mystring);
или (проще):
preg_split('/[.?!]/',$mystring);
Вы можете использовать preg_split()
сочетании с условием просмотра PCRE, чтобы разбить строку после каждого события .
, ;
, :
, ?
, !
, при сохранении фактической пунктуации:
Код:
$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 )
Предполагая, что вы действительно хотите, чтобы метки пунктуации с конечным результатом, вы пробовали:
$mystring = str_replace("?","?---",str_replace(".",".---",str_replace("!","!---",$mystring))); $tmp = explode("---",$mystring);
Который оставил бы ваши знаки препинания в такт.
preg_split('/\s+|[.?!]/',$string);
Возможная проблема может возникнуть, если есть адрес электронной почты, так как он может разбить его на новую строку на полпути.
Используйте preg_split и дайте ему регулярное выражение, например [\. | \ ?!], чтобы разделить
Вы можете попробовать preg_split
$sentences = preg_split("/[\.\?\!,;]+/", $mystring);
Обратите внимание, что это приведет к удалению пунктуации. Если вы хотите также разделить ведущие или конечные пробелы
$sentences = preg_split("/[\.\?\!,;]+\s+?/", $mystring);
$mylist = preg_split("/[\.|\?!:;]/", $mystring);
У вас не может быть нескольких разделителей для взрыва. Вот что preg_split();
для. Но даже тогда он взрывается в разделителе, поэтому вы получите предложения, возвращенные без знаков препинания. Вы можете предпринять preg_split шаг дальше и пометить его, чтобы вернуть их в своих собственных элементах с помощью PREG_SPLIT_DELIM_CAPTURE, а затем запустить некоторый цикл, чтобы вставить предложение и после метки пунктуации в возвращаемом массиве, или просто использовать preg_match_all();
:
preg_match_all('~.*?[?.!]~s', $string, $sentences);