preg заменить в PHP - регулярное выражение для условия НЕ


Я пытаюсь написать функцию на PHP, используя preg_replace, где она заменит все те символы, которые НЕ найдены в списке. Обычно мы заменяем их там, где они находятся, но этот отличается.

Например, если у меня есть строка:

$mystring = "ab2c4d";

Я могу написать следующую функцию, которая заменит все числа на *:

preg_replace("/(\d+)/","*",$mystring);

Но я хочу заменить те символы, которые не являются ни цифрами, ни алфавитами от а до я. Они могут быть чем угодно, как #$*();~!{}[]|\/.,<>?' е.т.к.

Поэтому все, что угодно, кроме цифр и алфавитов, должно быть заменено чем-то другим. Как мне это сделать?

Спасибо

Author: Ali, 2011-01-18

5 answers

Вы можете использовать отрицаемый класс символов ( используя ^ в начале класса):

/[^\da-z]+/i

Обновление: Я имею в виду, что вы должны использовать класс отрицаемых символов, и вы можете использовать тот, который я предоставил, но есть и другие;)

 15
Author: Felix Kling, 2011-01-18 13:51:54

Вы хотите использовать отрицаемый "класс символов". Синтаксис для них [^...]. В вашем случае просто [^\w] Я думаю.

 5
Author: mario, 2011-01-18 13:45:27

Попробуйте

preg_replace("/([^a-zA-Z0-9]+)/","*",$mystring);
 4
Author: Dmitri, 2013-03-18 13:41:50

\W соответствует не алфавитному, нецифровому символу. Символ подчеркивания _ включен в список буквенно-цифровых символов, поэтому он также не будет совпадать здесь.

preg_replace("/\W/", "something else", $mystring);

Должно подойти, если вы можете смириться с тем, что подчеркивание не заменяется. Если вы не можете, используйте

preg_replace("/[\W_]/", "something else", $mystring);
 2
Author: Tim Pietzcker, 2011-01-18 13:45:05

В \d, \w и аналогичные в регулярном выражении все имеют отрицательные версии, которые являются просто прописной версией одной и той же буквы.

Таким образом, \w соответствует любому символу слова (т.Е. в основном буквенно-цифровому), и поэтому \W соответствует чему угодно, кроме символа слова, поэтому чему угодно, кроме буквенно-цифрового.

Это похоже на то, что вам нужно.

Для получения дополнительной информации я рекомендую regular-expressions.info.

 1
Author: Spudley, 2011-01-18 13:50:27