PHP регулярное выражение, заменить все символы мусора - PullRequest
1 голос
/ 22 мая 2011

Я не могу понять, что такое RegEx, все еще очень новое во всей этой магии RegEx.У меня был некоторый ограниченный успех, но я чувствую, что есть более простой и более эффективный способ.

Я хотел бы очистить строку от всех не алфавитно-цифровых символов и превратить все эти недействительные подмножества в одно подчеркивание,но обрежьте их по краям.Например, строка <<+ćThis?//String_..! должна быть преобразована в This_String

Есть какие-нибудь мысли по поводу того, как сделать все это в одном RegEx?Я сделал это с обычным str_replace, а затем с помощью regexed мульти-подчеркивания, а затем обрезал последние подчеркивания с краев, но это похоже на излишнее количество и то, что RegEx мог бы сделать за один раз.Вроде бы здесь максимальная скорость / эффективность, даже если я имею дело с миллисекундами.

Ответы [ 3 ]

6 голосов
/ 22 мая 2011
= trim(preg_replace('<\W+>', "_", $string), "_");

В верхнем регистре \W экранирование здесь соответствует «несловесным» символам, означающим все, кроме букв и цифр.Чтобы удалить оставшиеся внешние подчеркивания, я бы все равно использовал trim.

2 голосов
/ 22 мая 2011
$output = preg_replace('/([^0-9a-z])/i', ' ', '<<+ćThis?//String_..!');
$output = preg_replace('!\s+!', '_', trim($output));
echo $output;
This_String
2 голосов
/ 22 мая 2011

Да, вы могли бы сделать это:

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

Тогда вы бы обрезали начальные и конечные подчеркивания, возможно, так:

preg_replace("/^_+|_+$/", "", $myReplacedString);

Это не одно регулярное выражение, но оно чищечем str_replace и куча регулярных выражений.

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