PHP regular expression

541
11 августа 2017, 00:37

Собрал регулярное выражение [\\\]+[nfvabrt0]{1} для замены некоторых символов (\n, \t, \0 и т.д.) функцией preg_replace() тут. Вроде работает, но скрипт при вводе "С:\Program Files" возвращает "С:Pogm Files" при вводе "127.0.0.1" возвращает "127...1". Пробовал разные флаги результат тот же. Подскажите ошибку.

Answer 1

Каждый из управляющих символов (\n, \t, ...) - это один целый символ (не два). Ведущий слэш - способ записи такого символа, а вовсе не отдельный, самостоятельный символ. Как следствие, отрывать слэш от "буковки" в регулярном выражении нельзя.

Правильное выражение должно иметь вид:

$output = preg_replace("/[\n\f\v\a\b\r\t\0]+/", '', $input);

Чтобы не писать всю эту кучу символов ручками, в PCRE есть символьный класс [:cntrl:]. Вот как его можно использовать для решения той же самой задачи:

$output = preg_replace("/[[:cntrl:]]+/", '', $input);

О других символьных классах вы можете узнать из официальной документации.

A вот и рабочий пример кода: https://3v4l.org/cjiLI

READ ALSO
Где в post-запросе передаются параметры?

Где в post-запросе передаются параметры?

В стандарте HTTP есть 3 составляющие: стартовая строка, заголовки и тело

562
Плагин HTML5 video от ckeditor

Плагин HTML5 video от ckeditor

Поставил плагин HTML5 video от ckeditor

564
Вызов нескольких функций класса разом

Вызов нескольких функций класса разом

Сразу извиняюсь если некорректно назвал топик, но интересует такая тема:

430
CURL перекодировка ответа

CURL перекодировка ответа

С помощью curl получаю данные со стороннего сайта, изначально его кодировка не известнаВ случае если кодировка windows-1251 получаю не читаемый...

485