Как удалить в предложении все кроме букв

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 3 января 2013 в 15:37
Нужно в шаблоне tpl сделать вывод тегов из титла)
В титле попадаются и скобки и тире и знаки препинания которые нужно убрать.

Пока сделал подобное:

$title|replace:" -":""|replace:" ":", "

убрал все тире с прилегающим пробелом и потом заменил пробелы на запятую с пробелом))

получил из титла keywords "ключевые слова"… может не совсем правильно, но как умею))

пробовал с помощью regex_replace убрать знаки препинания и кавычки разные, ничего не получилось(

Подскажите как правильно почистить предложение от всего кроме букв, цифр и дефиса?

Сейчас приложение может быть такое:

Новая модель [U-4rxx], стоит всего! 100$ (3100Р) — новогодняя акция

у меня получается вывести так:

Новая, модель, [U-4rxx],, стоит, всего!, 100$, (3100Р), новогодняя, акция

Понимаю что ключами будут выступать не совсем полезные слова, но по другому ключи сделать не могу, только из титла.

Спасибо.
#2 4 января 2013 в 16:17
Кто-то может подсказать? или на примерчик отправить — вроде вопрос простой, но на просторах инета рабочий вариант не нашел.
… может просто перечислить в replace все что нужно заменить? как правильно перечислять в tpl?

так вроде получается: $title|replace:" -":""|replace:"(":""… убираем тире, потом скобку,… и так далее, но как то вроде не по феншую)
#3 4 января 2013 в 16:32
reload, немного неправильно. Модификатор replace подобен функции str_replace(), который подходит только для замены точных совпадений в строке. Тебе нужно использовать модификатор regex_replace, который работает как preg_replace() и позволяет использовать регулярные выражения.
#4 4 января 2013 в 16:34
погугли по регулярным выражениям группы символов. можешь проверить на сайте сервиса проверки регулярных выражений. Если возникнут проблемы, опиши точнее, что нужно оставить, позже помогу с регуляркой. Пока тороплюсь, убегаю.
#5 4 января 2013 в 22:15

Тебе нужно использовать модификатор regex_replace, который работает как preg_replace() и позволяет использовать регулярные выражения.

Марат
так работает но в php, а вот в tpl не могу побороть — там немного иначе (
#6 5 января 2013 в 01:48

так работает но в php, а вот в tpl не могу побороть — там немного иначе (

Вроде бы работает и в tpl, если вот так.
  1. {$title|regex_replace:"/[^[:alnum:]-]/ui":""}
По крайней мере у меня на локалхосте. Если не работает с кириллицей, то возможна неправильно установлена локаль. Тогда в помощь setlocale().
#7 5 января 2013 в 03:06
нагородил такую вот х)
regex_replace:"/[\~\`\!\+\=\;\:\_\-\№ \— \'\.\,\|\{\@\#\%\^\&\*\(\)\}\[\]\<\>]+/i":", "


вроде убирает, только не всегда все корректно на выходе — по записи правильно все делает, но не так как хочется....
бывает в предложении два пробела или две скобки подряд, три точки или вопросительных знака и на выходе получаю иногда слово с подряд идущими двумя запятыми или вообще пробел с запятой иногда и вначале, что-то типа такого:

, слово, слово,, слово,, слово

это уже конечно лучше чем содержание мусора)) есть мысли как подправить?
#8 5 января 2013 в 07:11
были проблемы с некоторыми буквами русского алфавита (выводились ромбами) добавил модификатор u теперь нормально...

{$title|regex_replace:"/[^[:alnum:]-]/ui":""} вообще удаляло все русские буквы и пробелы — выводило слова с латинскими буквами слитые в одно целое), разбил добавлением пробела " " вместо "" не стал разбираться с setlocale()...
появилась новая Г:
спец символы типа « обрабатываются как &_laquo; и в итоге после удаления мусора получаю ключ laquo))
#9 5 января 2013 в 09:32

спец символы типа « обрабатываются как &_laquo; и в итоге после удаления мусора получаю ключ laquo))

Это из-за того, что тайтл перед передачей в шаблон обрабатывается htmlspecialchars(), скорее всего в файле page.class.php
Нужно, имхо, два раза применить regex_replace, в первый раз то, что давал, добавивь туда ещё "кроме пробела". Если не отключать htmlspecialchars(), придется перечислять ещё для замены в группирующих скобках сами html-сущности. Это всё заменяем на пустую строку. Второй раз уже между слов вставляем запятую.
#10 5 января 2013 в 15:36
Марат, спасибо.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.