Вставить параграф в предложения в PHP

Я использую

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);