LEXAlForpostl
Мой дом здесь!
- Регистрация
- 21 Май 2008
- Сообщения
- 766
- Реакции
- 228
- Автор темы
- #11
У меня выдаёт
Array ( )
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Array ( )
Можно регуляркой:Здравствуйте.
Помогите, пожалуйста, найти подстроку, которая начинается с первого символа в переменной $text и закончить поиск надо будет, когда закончится первые 3 слова, каждое из которых больше 3-х букв.
<?
$text = "РНР лучший в мире язык программирования";
echo preg_replace("'(.*?[\w\S]{3,})(\s.*?[\w\S]{3,})(\s.*?[\w\S]{3,})[^>]*[^>]'", "\\1\\2\\3", $text);
?>
А какая у тебя версия РНР? И в каком виде запускаешь скрипт? Имею ввиду запускаешь так как есть, или внедряешь в какой то скрипт? Если второй вариант, то выложи весь код, будет легче понять де лажа... Дело в том, что пустой массив возвращается когда переменная $text="";У меня выдаёт Array()
Действительно. Это я ошибся, приводя пример.
preg_match('#^'.substr($text,0,1).'\S{3,}\s{1,}(\S{1,3}\s{1,})*(\S{4,}\s{1,}(\S{1,3}\s{1,})*){2}|^'.substr($text,0,1).'\S{0,2}\s{1,}(\S{1,3}\s{1,})*(\S{4,}\s{1,}(\S{1,3}\s{1,})*){3}#si', $text, $iskomaya_stroka);
$iskomaya_stroka = preg_replace('#(\s{1,}\S{1,3})*\s*$#i', '', $iskomaya_stroka[0]); //чистим в конце лишние 1-3 символа и пробелы
$iskomaya_stroka = preg_replace("'(.*?[\w\S]{4,})(\s.*?[\w\S]{4,})(\s.*?[\w\S]{4,})[^>]*[^>]'", "\\1\\2\\3", $text);
if(preg_match('#(\s|^)('.substr($text,0,1).'[\w\S]{3,}|'.substr($text,0,1).'.*?[\w\S]{4,})(\s.*?[\w\S]{4,})(\s.*?[\w\S]{4,})(\s|$)#', $text, $iskomaya_stroka))
$iskomaya_stroka = $iskomaya_stroka[2] . $iskomaya_stroka[3] . $iskomaya_stroka[4];
Вроде работает и с первой буквой…В исправленном варианте VandJ
Но эти два варианта могут по разному работать с памятью, нужно тестить на крупных объемах текста, если такие будут подставляться. Если же все тексты малюсенькие и измеряются в килобайтах, то лучше вариант от VandJ (в рамках решений регулярками)PHP:$iskomaya_stroka = preg_replace("'(.*?[\w\S]{4,})(\s.*?[\w\S]{4,})(\s.*?[\w\S]{4,})[^>]*[^>]'", "\\1\\2\\3", $text);
UPD
Правда в его варианте не включена первая буква и нужно додумывать регулярку.
Вот проапгрейдженый вариант на базе регулярки VandJ
PHP:if(preg_match('#^('.substr($text,0,1).'[\w\S]{3,}|'.substr($text,0,1).'.*?[\w\S]{4,})(\s.*?[\w\S]{4,})(\s.*?[\w\S]{4,})\s#', $text, $iskomaya_stroka)) $iskomaya_stroka = $iskomaya_stroka[1] . $iskomaya_stroka[2] . $iskomaya_stroka[3];
<?
$text = "Да, и РНР лучший в мире язык программирования";
$iskomaya_stroka = preg_replace("'(.*?[\w\S]{4,})(\s.*?[\w\S]{4,})(\s.*?[\w\S]{4,})[^>]*[^>]'", "\\1\\2\\3", $text);
echo $iskomaya_stroka; //Да, и РНР лучший в мире язык
?>
Вроде работает и с первой буквой…
Вот этого в регулярке собственно и не было. Кстати поправил свой пост, т.к. искало только если первая буква самая первая в строке и не учитывался конец строки вместо последнего пробела.Здравствуйте.
Помогите, пожалуйста, найти подстроку, которая начинается с первого символа в переменной $text и закончить поиск надо будет, когда закончится первые 3 слова, каждое из которых больше 3-х букв.
Конечно нет. Если нужно десяток-сотню тысяч строк собрать, то нужны базовые функции strpos/substr...Регуляркой быстрее будет?