Задача: Превратить строчку вида Код (Text): Рубрика/Первая:подрубрика/Тоже, рубрика в Код (Text): |Рубрика| |Первая| |подрубрика| |Тоже| |рубрика| Вопрос: как? Наработки: 1)Все найти и обрамить. PHP: <?php $subj='Рубрика/Первая подрубрика/Тоже, рубрика'; $pattern="#([А-Яа-я0-9]+)#u"; preg_match_all($pattern, $subj, $matches); $rez="|".implode('| |',$matches[1])."|"; Но хочется сделать одной строчкой. 2)Обрамить слова, остальное убрать. PHP: <?php $subj='Рубрика/Первая подрубрика/Тоже, рубрика'; $pattern="#.*?([А-Яа-я0-9]+).*?#u"; $rep=" |$1| "; $rez=preg_replace($pattern, $rep, $subj); Получаются сдвоенные пробелы между словам.
PHP: <?php ini_set('display_errors',1); error_reporting(E_ALL); setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251'); $m='Рубрика/Первая:подрубрика/Тоже, рубрика'; $poisk='/([а-я].*)(\/|:|,|$)/siU'; preg_match_all($poisk,$m,$matches); echo '|'; echo $matches[1][0]; echo '|'; echo ' |'; echo $matches[1][1]; echo '|'; echo ' |'; echo $matches[1][2]; echo '|'; echo ' |'; echo $matches[1][3]; echo '|'; echo ' |'; echo $matches[1][4]; echo '|'; ?>
1)Строка "Рубрика/Первая:подрубрика/Тоже, рубрика" взята для примера. Может быть больше слов, может быть меньше. 2)По сути это первый из предложенных мною вариантов.
во втором варианте сделай $rep="|$1| "; - в конце будет один лишний пробел или $rep=" |$1|"; - лишний пробел будет в начале
Который спокойно убирается через trim. Точно. PS: Только этот модуль уже пол года как не используется. =)))
Вот универсальный вариант с учетом разграничивания слов слешем -запятой-точкой дефисом-пробелом Лови ! ) Код (Text): <?php ini_set('display_errors',1); error_reporting(E_ALL); setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251'); $m='Рубрика/Первая:подрубрика/Тоже, рубрика'; $poisk='/([а-я]+)[-\/:,\.\s]*/si'; preg_match_all($poisk,$m,$matches); $keywords = preg_split("/[\s\/:,\.]+/", $m ); $count=count($keywords); $new=preg_match_all($poisk,$m,$matches); $i=0; while($i<$count) // { echo '|'; echo $matches[1][$i]; echo '|'; echo " "; $i++; } ?>