Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   PHP (http://www.flasher.ru/forum/forumdisplay.php?f=20)
-   -   ereg-обрезание :) (http://www.flasher.ru/forum/showthread.php?t=49552)

PaWell 25.09.2003 21:51

ereg-обрезание :)
 
Помогите, пожалуйста написать такое регулярное выражение, которое находит в строке длинные слова, больше 20 знаков, и разбивает их пробелами.

Заранее благодарен за помощь!!!

kompadre 25.09.2003 22:23

Хм ... А зачем тебе ерег сдался ? Он же ресурсов до хвига и больше жрет!

Если школьное задание, то пожалуйста -

/([\w]{10})([\w]10,})/

заменяем на

/$1 $2/

лучше для этого дела использовать preg_replace

если не для школы ... то тогда напиши хвункцию сам. Без регов

PaWell 25.09.2003 23:05

2 kompadre:
А как твой совет до кучи собрать??? :)
Чот я с "/$1 $2/" не очень понял...
Напиши мне, пожалуйста, полностью preg_replace, который разбивает строку.

kompadre 26.09.2003 02:07

Я сам не очень-то в моих советах разбираюсь ... Но смотри, берем :

- первая часть регулярного выражения (одна штука). В простонародие это называется pattern (игла, то что мы исчем)
- вторая часть регулярного выражения (или replacement, то на что бум менять)
- string (стог, строка из которой бум менять)

так ...

в другую руку берем функцию
PHP код:

preg_replace($pattern, $replacement, $string); 

и подстовляем

должно получится что-то вроде

$replaced = preg_replace ("/([\w]{10})([\w]{10,})/", "$1 $2", $string);

По идеи это должно в слове (в котором 20 или больше букв) вставить пробел на 10-й букве. Хотя коряво это блин

* Прошу прощения, оказывается replacement-у не нужны косые!

Nirva 26.09.2003 10:36

$str = "строка товя оргромная с мегачем-то там таким, кстати, самое длинное. известное мне и частоупотребляемое слово - достопримечтальность";
$ar = explode($str," ");
foreach($ar as $curr)
{
$res .= wordwrap($curr,10," ",1)
}

PaWell 26.09.2003 16:41

2 kompadre:
Почти всё работает!!! :)
Если слово из 20 букв, то всё ок (скрипт его разбивает на два по 10 букв), а вот если слово из 40 букв, то выводит первое слово из 10 букв, а второе - из 30 :(
Тоесть после первого разбиения строки скрипт её дальше не смотрит :( Как это исправить???

2 Nirva:
$res возвращает пустое значение :(
Почему???

kompadre 26.09.2003 17:09

Это ни как не исправиш, говорю тебе никакних регов. Ворд врап, только нирва все нимного попутал

$res = wordwrap($str,10," ",1)

и все

nagash 26.09.2003 18:29

если так принципиально это сделать регом тогда вот так

PHP код:

$a = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb ccccccccccccccccccccccccccccccc";
$a = preg_replace("/(\w{10})/", "$1 ", $a);
echo 
$a; 

только тут надо отметить один момент... прег реплейс надо самому себе приравнивать...
если написать
$b = preg_replace("/(\w{10})/", "$1 ", $a);
тогда $b не изменится...
надо именно
$a = preg_replace("/(\w{10})/", "$1 ", $a);

удачи...

kompadre 26.09.2003 19:19

Здесь вынужден согласиться

Nirva 26.09.2003 20:14

Цитата:

Оригинал написал(а) kompadre
Это ни как не исправиш, говорю тебе никакних регов. Ворд врап, только нирва все нимного попутал

$res = wordwrap($str,10," ",1)

и все

тогда просто расфигачишь всю строку по 10 символов на пробелы. щас....

PHP код:

<?
$str 
= "строка товя оргромная с мегачем-то там таким, кстати, самое длинное. известное мне и частоупотребляемое слово - достопримечтальность";
$ar = explode(" ",$str);
foreach(
$ar as $curr)
{
$res .= wordwrap($curr,10," ",1) ." ";
}
echo 
$res;
?>

работает. в прошлом ступил, конечно.


Часовой пояс GMT +4, время: 18:07.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.