Задать вопрос
@spy45242

Почему регулярка удаляет букву В?

Собственно пытаюсь удалить лишние символы из строки такой регуляркой:
preg_replace('/([:^~|@№$–=+*&%;\[\]<>()_—«»#\/]+)/i', "", $some);

Но почему то в тексте удаляются все буквы В, как маленькие, так и большие.
В чем может быть проблема?
Никак не пойму, на регэкспе всё нормально тестируется. Может быть дело в кодировке?
  • Вопрос задан
  • 94 просмотра
Подписаться 1 Средний 2 комментария
Решения вопроса 1
lidacriss
@lidacriss
wtf
я проверил теорию о "не экранированном дефисе"
если в этом месте используется дефис _-«
то регуляркой это хавается как все символы от _ до «
если посмотреть юникод код символа "Нижнее подчёркивание" _, то увидим, что он имеет U+005F порядковый номер = 95
а "кавычка", в свою очередь U+00AB = 171
в это диапазон попадают все латинские литеры в нижнем регистре
5afd4a588b57b648094044.png
а так как у вас в регулярке еще стоит флаг "i" - регистронезависимость, то это под эту регулярку попадают и латинские литеры в Верхнем регистре тоже

https://repl.it/repls/SpryAzureAudit
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
6ff31712d88929c5181d5715ef99.png
Никакой В не удаляется.
Добавил только /u для корректной работы с utf-8.
var_dump(preg_replace('/([:^~|@№$–=+*&%;\[\]<>()_—«»#\/]+)/iu', "", "Владимир владимирович #$#!@%"));
Ответ написан
@phpkoder
Web-програмист
попробуй такую регулярку '[^a-zA-Z0-9а-яА-ЯёЁ]+?'
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы