Поиск подстроки

LEXAlForpostl

Мой дом здесь!
Регистрация
21 Май 2008
Сообщения
766
Реакции
228
Здравствуйте.
Помогите, пожалуйста, найти подстроку, которая начинается с первого символа в переменной $text и закончить поиск надо будет, когда закончится первые 3 слова, каждое из которых больше 3-х букв.
Например:
PHP:
$text = "РНР лучший в мире язык программирования";
$iskomaya_podstroka = "РНР лучший в мире";
 
Где-то так.
PHP:
preg_match('#'.substr($text, 1, 1).'\S*\s*(\S{3,})?\s*(\S{3,})?\s*(\S{3,})?#i', $stroka, $matches)
Но ваше утверждение по поводу
каждое из которых больше 3-х букв
$text = "РНР лучший в мире язык программирования";
$iskomaya_podstroka = "РНР лучший в мире";
Неверно.
 
Вот такая замутка:
PHP:
$text = "РНР лучший в мире язык программирования";
$a   = str_word_count($text, 1);
$cw=0;
foreach ($a as $key=>$word){
if($cw<3){
$iskomaya_stroka.=$word." ";
if(strlen($word)>=3){$cw++;}
}}
echo  rtrim($iskomaya_stroka);
Выдаст именно "РНР лучший в мире"
Если пробел в конце искомой строки не критичен, то функцией rtrim() можно пренебречь.
 
Но ваше утверждение по поводу. Неверно.
В этом то и смысл. Если попадается слово меньше либо равно 3м буквам - продолжаем поиск.
 
В этом то и смысл. Если попадается слово меньше либо равно 3м буквам - продолжаем поиск.
Ммм.... прошу прощения проморгал условие "меньше либо равно 3м буквам"... В таком случае в моём варианте необходимо убрать "=" из условия if(strlen($word)>=3){$cw++;} должен получиться скрипт:
PHP:
$text = "РНР лучший в мире язык программирования"; 
$a   = str_word_count($text, 1); 
$cw=0; 
foreach ($a as $key=>$word){ 
if($cw<3){ 
$iskomaya_stroka.=$word." "; 
if(strlen($word)>3){$cw++;} 
}} 
echo  rtrim($iskomaya_stroka);
собственно изменяя значение переменной $cw в условии if($cw<3) и собственно условие if(strlen($word)>3) да ещё и добавляя дополнительные проверки можно издеваться над строками как угодно :)
 
Тогда где-то так
PHP:
preg_match('#^'.substr($text,1,1).'\S{2,}\s{1,}(\S{1,2}\s{1,})*(\S{3,}\s{1,}(\S{1,2}\s{1,})*){2}|^'.substr($text,1,1).'\S{0,1}\s{1,}(\S{1,2}\s{1,})*(\S{3,}\s{1,}(\S{1,2}\s{1,})*){3}#i', $text, $iskomaya_stroka);
$iskomaya_stroka = preg_replace('#(\s{1,}\S{1,2})*\s*$#i', '', $iskomaya_stroka[0]); //чистим в конце лишние 1-2 символа и пробелы
Учитываются слова больше или равно 3 символам. Как в примере с РНР лучший в мире, ведь "PHP" именно равно 3 символам, а не более.
Вам бы больше примеров привести разных строк, с нужным результатом. Не обязательно реальные примеры, достаточно любой набор символов.
\S считается все, что не пробельный символ, т.е. это и буквы и цифры и знаки препинания. Т.е. захват будет таким:
Код:
[B]P. лучший в. мире d! язык[/B][S] программирования[/S]
или
Код:
[B]P., лучший в. мире[/B][S] d! язык программирования[/S]
Для выключения точек из подсчета слов >=3 символов - нужно додумывать регулярку.

Конечно работа с регулярками в принципе не очень-то оптимальна, но на мой взгляд в них проще менять условия + мозги включаются и не гниют :)
 
$text = "РНР лучший в мире язык программирования";
$a = str_word_count($text, 1);
$cw=0;
foreach ($a as $key=>$word){
if($cw<3){
$iskomaya_stroka.=$word." ";
if(strlen($word)>3){$cw++;}
}}
echo rtrim($iskomaya_stroka);
Не отработал пример.

Учитываются слова больше или равно 3 символам. Как в примере с РНР лучший в мире, ведь "PHP" именно равно 3 символам, а не более.
Действительно. Это я ошибся, приводя пример.
Прошу прощения у всех.
Правильный ответ скрипта
"РНР лучший в мире язык"
 
То есть как
Не отработал пример.
?
Совсем не отработал или не правильно отработал?
Перепроверено! Скрипт рабочий и в результате выводит фразу "РНР лучший в мире язык"
 
Ничего не вывел скрипт.
Сделал
PHP:
$text = "РНР лучший в мире язык программирования";
$a = str_word_count($text, 1);
var_dump ($a);
$cw=0;
Результат:
 
Странно.... У меня конструкция:
PHP:
<?php
 $text = "РНР лучший в мире язык программирования";
$a = str_word_count($text, 1);
print_r($a);
$cw=0;
foreach ($a as $key=>$word){
if($cw<3){
$iskomaya_stroka.=$word." ";
if(strlen($word)>3){$cw++;}
}}
echo rtrim($iskomaya_stroka);
?>
Выдаёт:
Array ( [0] => РНР [1] => лучший [2] => в [3] => мире [4] => язык [5] => программирования ) РНР лучший в мире язык
 
Назад
Сверху