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

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

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

$replace = array(" ",".",",","'","@");
$newString = str_replace($replace,"_",$join);

$join = "the original string i'm parsing through";

Я хочу удалить все, кроме a-z, A-Z или 0-9. Я ищу обратную функцию выше. Псевдокод способ написать это будет

Если символы в $ join не равны a-z, A-Z, 0-9 затем измените символы в $join на "_"

Ответы [ 3 ]

37 голосов
/ 14 апреля 2009
$newString = preg_replace('/[^a-z0-9]/i', '_', $join);

Это должно сработать.

9 голосов
/ 14 апреля 2009

Регулярное выражение для всего, что не является a-z, A-Z, 0-9:

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

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

7 голосов
/ 14 апреля 2009

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

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

\ W - группа, не состоящая из слов. Символом слова являются a-z, A-Z, 0-9 и _. \ W соответствует всему, что не упомянуто ранее *.

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

* Редактировать 2: Предполагается C или один из английских языков. Другие локали могут иметь буквы с акцентом в классе символов слова. Локали Unicode будут рассматривать только символы ниже кодовой точки 128 как символы.

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