Как написать регулярное выражение в PHP для удаления специальных символов?

Я довольно новичок в PHP, и я заметил, что существует много разных способов обработки регулярных выражений.

Это то, что я сейчас использую:

$replace = array(" ",".",",","'","@"); $newString = str_replace($replace,"_",$join); $join = "the original string i'm parsing through"; 

Я хочу удалить все, что не является az, AZ или 0-9. Я ищу обратную функцию выше. Псевдокодным способом его записи было бы

Если символы в $ join не равны az, AZ, 0-9, то измените символы в $join на "_"

 $newString = preg_replace('/[^a-z0-9]/i', '_', $join); 

Это должно сделать трюк.

Я не даю вам ответа, но этот урок стоит 10 минут.

Ссылка на регулярные выражения в PHP

Регулярное выражение для всего, что не является az, AZ, 0-9, равно:

 preg_replace('/[^a-zA-Z0-9]/', "_", $join); 

Это известно как класс отрицательных символов

Самый простой способ:

 preg_replace('/\W/', '_', $join); 

\ W – группа символов без слов. Символом слова является az, AZ, 0-9 и _. \ W соответствует всем, что ранее не упоминалось *.

Изменить: preg использует регулярные выражения Perl, задокументированные в документе perlman perlre .

* Изменить 2: Это предполагает C или один из английских мест. Другие локали могут иметь буквы с акцентом в классе символов слова. В юникодских локалях будут учитываться символы, расположенные ниже кодовой точки 128, как символы.