У меня есть текст, из которого я хочу удалить все символы, которые НЕ являются следующими.
wish_characters =
0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n
Последняя – это \ n (новая строка), которую я хочу сохранить.
Чтобы сопоставить все символы, кроме перечисленных, используйте инвертированный набор символов [^…]
:
$chars = "0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n"; $pattern = "/[^".preg_quote($chars, "/")."]/";
Здесь preg_quote
используется для preg_quote
определенных специальных символов, чтобы они интерпретировались как буквенные символы.
Вы также можете использовать диапазоны символов для выражения перечисленных символов:
$pattern = "/[^0-9!&',-.\\/az\n]/";
В этом случае не имеет значения, является ли буквальный вход ,-.
бежит или нет. Потому что ,-.
интерпретируется как диапазон символов от (0x2C) до .
(0x2E), который уже содержит -
(0x2D) между ними.
Затем вы можете удалить те символы, которые сопоставляются с preg_replace
:
$output = preg_replace($pattern, "", $str);
$string = 'This is anexample $tring! :)'; $string = preg_replace('/[^0-9!&\',\-.\/az\n]/', '', $string); echo $string; // hisisanexampletring!
^ Это чувствительно к регистру, поэтому капитал T удаляется из строки. Чтобы разрешить заглавные буквы, $string = preg_replace('/[^0-9!&\',\-.\/A-Za-z\n]/', '', $string)