Регулярные выражения.

Николай

PHP - CooL
Регулярные выражения.

Уверен что этот вопрос спрашивался здесь уже не раз, но поиск не помог :(
Подскажите как "обрезать" слово в предложении, если его длина больше заданного числа символов.
 

SiMM

Новичок

sage

Новичок
[m]strlen[/m]
[m]substr[/m]
?

-~{}~ 25.04.04 21:04:

и те ссылки, которые дал SiMM
 

Николай

PHP - CooL
2SiMM
Наверно не "Поиск чего?", а поиск где -- на форуме.

Функции strlen, substr я отлично знаю. Я не понимаю как их применить в данном случае. Мне нужен принцип... Я просто не понимаю как можно "засунуть" strlen в регулярные выражения...

Сейчас в моей голове только один вариант действий:
1) Разбить предложение на пробелы ($s=split(" ", $pr))
2) Потом каждый элемент получившегося массива проверить с помощью strlen (if(strlen($s[])>50)...)
3) Потом обратно "собрать" предложение

Но это же ГЕМОРОЙ! Но моих мозгов хватает только на это :(
 

Indigo Flow

Guest
ну вот смотри, один из примеров, думаю ты поймёшь в чём смысл =)
PHP:
<?php
$string = "это вооооооооооооооооооооооооооот такое предложение";
$array=explode(" ",$string);
for($i=0;$i<count($array);$i++){
if (strlen($array[$i]) > 15) { // если слово больше 15 символов,
$array[$i] = substr($array[$i],0,5); //обрезаем до 5
} 
echo $array[$i] . " ";
}
?>
 

Indigo Flow

Guest
.des.
ага, пасиба за совет, я подумаю......
 

Николай

PHP - CooL
2 .des. Посмотрел топик(ксати это я его тогда и создал :)))), но ведь там так и нет решения! Worldwrap мне не подходит...
 

SiMM

Новичок
Николай, почитай наконец то, что тебе дали (решение .des. уже привёл, только паттерн наверно всё же '/(\S{18})(\S)+/s'). Попробуй написать сам - не получится - покажешь, что делал - а тут тебя поправят там, где ты был не прав. Кстати, за полтора года вполне можно было выучить регулярники хотя бы на таком уровне.
 

Николай

PHP - CooL
Пожалуйста, конкретный пример того, что не получается:
PHP:
$x="Текст... http://encycl.yandex.ru/yandsearch?encid=bse&encid=brokminor&encid=dal&encid=io&encid=pdr&encid=glossary&encid=buppdic&encid=konst&encid=updic&encid=internet&encid=japan&encid=accounting&encid=pharma&encid=mos&encid=abramov&encid=shortsin&encid=gl_social&encid=gl_natural&rpt=encyc&t=1&enc_s=text&text=%EA%EE%ED%F2%E5%ED%F2 текст";
$pattern='/(\S{20})(\S\S)+/s';
$replacement='\1<br>\2';
$x=preg_replace($pattern, $replacement, $x);
print $x;
 

Николай

PHP - CooL
Блин, извиняюсь, вопрос был поставлен не верно...
Мне нужно вот что: "обеспечить отсутствие непереносимых фрагментов слов длинее 18 символов"(с) Crazy
А этот код просто обрезает после определенного символа, а "остатки" удаляет...
 

SiMM

Новичок
Автор оригинала: Николай
Мне нужно вот что: "обеспечить отсутствие непереносимых фрагментов слов длинее 18 символов"(с) Crazy
PHP:
echo preg_replace('/(\S{18})/s','\1 ', $x);
Оно?
PS: и всё же разберись с регулярниками - они не так уж и сложны, если разобраться.
 

Srg

Guest
А если есть такая строчка ./files/xxxx/doc№5(108).rar , и нужно из всей строки оставить только №5(108).

Подскажите как это сделать с помощью регулярных выражений?
 

SiMM

Новичок
Автор оригинала: Srg
А если есть такая строчка ./files/xxxx/doc№5(108).rar , и нужно из всей строки оставить только №5(108).
А нужно ли это делать при помощи регулярных выражений? [m]basename[/m]($file,'.rar'), [m]substr[/m]
 
Сверху