2011-01-18 1 views
4

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

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

$mystring = "ab2c4d"; 

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

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

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

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

Благодаря

ответ

13

Вы можете использовать negated character class (с использованием ^ в начале класса):

/[^\da-z]+/i 

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

+0

Отлично, я использовал этот, и он сработал. – Ali

3

Попробуйте

preg_replace("/([^a-zA-Z0-9]+)/","*",$mystring); 
2

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

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

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

preg_replace("/[\W_]/", "something else", $mystring); 
+0

Второе регулярное выражение также не заменяет символ подчеркивания. Вместо этого вы должны использовать preg_replace ("/ [\ W _] /", "*", $ mystring). – Soumya

+0

@ Soumya92: Я тоже это заметил. Опубликовать слишком быстро, отредактировать позже :) –

1

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

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

Это звучит так, как вы.

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

Смежные вопросы