Удалить все несоответствующие символы в строке PHP?

У меня есть текст, из которого я хочу удалить все символы, которые НЕ являются следующими.

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)