Если у меня есть описание вроде:
«Мы предпочитаем вопросы, на которые можно ответить, а не просто обсуждать. Сообщите подробности, напишите ясно и просто».
и все, что я хочу, это «Мы предпочитаем вопросы, на которые можно ответить, а не просто обсуждать».
Я полагаю, что буду искать регулярное выражение, например «[!! \?]», Определить strpos, а затем сделать субстрат из основной строки, но я полагаю, что это обычная вещь, поэтому надеемся, что у кого-то есть фрагмент, лежащий вокруг.
Благодаря!
Несколько более дорогостоящее выражение, однако, будет более гибким, если вы хотите выбрать несколько типов пунктуации в качестве терминаторов предложений.
$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, если вам нужны надежные результаты. Токенизатор может идентифицировать символы окончания предложения («?», «.», «;» И т. Д. В зависимости от вашего предполагаемого использования), и вы можете разделить на это.