Есть ли у кого-нибудь фрагмент кода PHP для захвата первого «предложения» в строке?

Если у меня есть описание вроде:

«Мы предпочитаем вопросы, на которые можно ответить, а не просто обсуждать. Сообщите подробности, напишите ясно и просто».

и все, что я хочу, это «Мы предпочитаем вопросы, на которые можно ответить, а не просто обсуждать».

Я полагаю, что буду искать регулярное выражение, например «[!! \?]», Определить strpos, а затем сделать субстрат из основной строки, но я полагаю, что это обычная вещь, поэтому надеемся, что у кого-то есть фрагмент, лежащий вокруг.

Благодаря!

Solutions Collecting From Web of "Есть ли у кого-нибудь фрагмент кода PHP для захвата первого «предложения» в строке?"

Несколько более дорогостоящее выражение, однако, будет более гибким, если вы хотите выбрать несколько типов пунктуации в качестве терминаторов предложений.

$sentence = preg_replace('/([^?!.]*.).*/', '\\1', $string); 

Найдите символы окончания, за которыми следует пробел

  $sentence = preg_replace('/(.*?[?!.](?=\s|$)).*/', '\\1', $string); 
 <?php $text = "We prefer questions that can be answered, not just discussed. Provide details. Write clearly and simply."; $array = explode('.',$text); $text = $array[0]; ?> 

Мое предыдущее регулярное выражение, похоже, работало в тесте, но не в реальном PHP. Я отредактировал этот ответ, чтобы предоставить полный, рабочий PHP-код и улучшенное регулярное выражение.

 $string = 'A simple test!'; var_dump(get_first_sentence($string)); $string = 'A simple test without a character to end the sentence'; var_dump(get_first_sentence($string)); $string = '... But what about me?'; var_dump(get_first_sentence($string)); $string = 'We at StackOverflow.com prefer prices below US$ 7.50. Really, we do.'; var_dump(get_first_sentence($string)); $string = 'This will probably break after this pause .... or won\'t it?'; var_dump(get_first_sentence($string)); function get_first_sentence($string) { $array = preg_split('/(^.*\w+.*[\.\?!][\s])/', $string, -1, PREG_SPLIT_DELIM_CAPTURE); // You might want to count() but I chose not to, just add return trim($array[0] . $array[1]); } 
 <?php $content = "My name is Younas. I live on the pakistan. My email is **fromyounas@gmail.com** and skype name is "**fromyounas**". I loved to work in **IOS development** and website development . "; $dot = "."; //find first dot position $position = stripos ($content, $dot); //if there's a dot in our soruce text do if($position) { //prepare offset $offset = $position + 1; //find second dot using offset $position2 = stripos ($content, $dot, $offset); $result = substr($content, 0, $position2); //add a dot echo $result . '.'; } ?> 

Выход:

Меня зовут Юнас. Я живу в Пакистане.

  reset(explode('.', $s, 2)); 
 current(explode(".",$input)); 

Я бы, вероятно, использовал любое из множества подстрок / строковых функций в PHP (некоторые из них уже упоминаются). Но также ищите «.» ИЛИ «. \ N» (и, возможно, «. \ N \ r») вместо «.». На всякий случай по какой-то причине предложение содержит период, за которым не следует пробел. Я думаю, что это укрепит вероятность получения вами реальных результатов.

Пример, поиск только "." на:

 "I like stackoverflow.com." 

Вы получите:

 "I like stackoverflow." 

Когда действительно, я уверен, что вы предпочтете:

 "I like stackoverflow.com." 

И как только у вас будет этот основной поиск, вы, вероятно, столкнетесь с одним или двумя случаями, когда он может что-то пропустить. Настройтесь, как вы бежите с ним!

Это действительно тяжелая проблема. Я рекомендую изучить пакет NLP, если вам нужны надежные результаты. Токенизатор может идентифицировать символы окончания предложения («?», «.», «;» И т. Д. В зависимости от вашего предполагаемого использования), и вы можете разделить на это.