Здравствуйте. Почему после этой функции: Код (PHP): $sitemeta = preg_replace ("/[^а-яА-Яa-zA-Z0-9\ \,\[\]-\_\s]/", "", $sitemeta); строка "абвгдеёжзийклмнопрстуфхцчшщъыьэюя" заменяется на "абвгдеёжзийклмноп���������������я"?
Спасибо. --- Добавлено --- Ещё 1 вопрос, почему Код (PHP): $sitemeta = preg_replace ("/[^а-яa-z0-9\ ,-_\s]/iuxs", "", $sitemeta); не удаляет некоторые спец. символы? Например, ">", "<", "[", "]" и т.п.
выражение должно удалять все символы кроме а-я, a-z, 0-9, тире, нижнее подчеркивание и пробельный символ? и что за '\ ,' между ними кстати пробел.
Потому что в списке присутствует ",-_" что означает "все символы от , до _" - а сюда как раз попадают в том числе и [, <. --- Добавлено --- Если ты хочешь включить в список знак "-" именно как знак, а не как модификатор диапазона - то ставь его первым, иначе он всегда будет работать как модификатор диапазона.
Это не всегда работает, зависит от реализации регэкспов. В некоторых версиях grep`а, например, он даже экранированный минус не понимает. Поэтому универсальная рекомендация - ставить его первым в списке.
Ну а вообще, на будущее, в борьбе с регэкспами очень помогает https://regex101.com/ - он особенно ценен тем, что он разбирает твой регэксп и довольно подробно расписывает, из чего он состоит и как работает.
@Basilio у меня от этого волосы дыбом встают, когда вижу, сколько шагов делает регулярка для разбора простых вещей...
Нууу... Да. А ты знаешь более эффективные способы решать те задачи, для которых применяются регулярки?
Наверное надо лучше знать регулярки и писать лучше чем я. Вот есть всякие "невозвратные" атомарные, я не шарю как их делать.