Ответ 1
Чтобы сопоставить все символы, кроме перечисленных, используйте инвертированный набор символов [^…]
:
$chars = "0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n";
$pattern = "/[^".preg_quote($chars, "/")."]/";
Здесь preg_quote
используется для удаления определенных специальных символов, чтобы они интерпретировались как буквенные символы.
Вы также можете использовать диапазоны символов для выражения перечисленных символов:
$pattern = "/[^0-9!&',-.\\/a-z\n]/";
В этом случае не имеет значения, экранирован литеральный -
в ,-.
или нет. Поскольку ,-.
интерпретируется как диапазон символов от ,
(0x2C) до .
(0x2E), который уже содержит -
(0x2D) между ними.
Затем вы можете удалить те символы, которые соответствуют preg_replace
:
$output = preg_replace($pattern, "", $str);