preg заменить в PHP - регулярное выражение для условия НЕ
Я пытаюсь написать функцию на PHP, используя preg_replace, где она заменит все те символы, которые НЕ найдены в списке. Обычно мы заменяем их там, где они находятся, но этот отличается.
Например, если у меня есть строка:
$mystring = "ab2c4d";
Я могу написать следующую функцию, которая заменит все числа на *:
preg_replace("/(\d+)/","*",$mystring);
Но я хочу заменить те символы, которые не являются ни цифрами, ни алфавитами от а до я. Они могут быть чем угодно, как #$*();~!{}[]|\/.,<>?' е.т.к.
Поэтому все, что угодно, кроме цифр и алфавитов, должно быть заменено чем-то другим. Как мне это сделать?
Спасибо
5 answers
Вы можете использовать отрицаемый класс символов ( используя ^
в начале класса):
/[^\da-z]+/i
Обновление: Я имею в виду, что вы должны использовать класс отрицаемых символов, и вы можете использовать тот, который я предоставил, но есть и другие;)
Вы хотите использовать отрицаемый "класс символов". Синтаксис для них [^...]
. В вашем случае просто [^\w]
Я думаю.
Попробуйте
preg_replace("/([^a-zA-Z0-9]+)/","*",$mystring);
\W
соответствует не алфавитному, нецифровому символу. Символ подчеркивания _
включен в список буквенно-цифровых символов, поэтому он также не будет совпадать здесь.
preg_replace("/\W/", "something else", $mystring);
Должно подойти, если вы можете смириться с тем, что подчеркивание не заменяется. Если вы не можете, используйте
preg_replace("/[\W_]/", "something else", $mystring);
В \d
, \w
и аналогичные в регулярном выражении все имеют отрицательные версии, которые являются просто прописной версией одной и той же буквы.
Таким образом, \w
соответствует любому символу слова (т.Е. в основном буквенно-цифровому), и поэтому \W
соответствует чему угодно, кроме символа слова, поэтому чему угодно, кроме буквенно-цифрового.
Это похоже на то, что вам нужно.
Для получения дополнительной информации я рекомендую regular-expressions.info.