REGEX (в PHP) .. удалить не буквенно-цифровые символы в конце? - PullRequest
1 голос
/ 29 октября 2009
$test = "!!!   sdfsdf   sd$$$fdf   ___";
$test = str_replace(' ', '_', $test); // Turn all spaces into underscores.
echo $test."<br />"; // Output: !!!___sdfsdf___sd$$$fdf______

$test = preg_replace('/[^a-zA-Z0-9_-]/', '-', $test); // Replace anything that isn't alphanumeric, or _-, with a hyphen.
echo $test."<br />"; // Output: !!!___sdfsdf___sd---fdf______

$test = preg_replace('/([_-])\1+/', '$1', $test); // Reduce multiple _- in a row to just one.
echo $test."<br />"; // Output: !_sdfsdf_sd-fdf_

Приведенный выше код - это то, что у меня сейчас есть, для чего я пытаюсь выяснить, что такое REGEX - как обрезать любые не буквенно-цифровые символы с концов. Таким образом, перевод окончательного результата из "! _Sdfsdf_sd-fdf_" в "sdfsdf_sd-fdf".

Ответы [ 4 ]

3 голосов
/ 29 октября 2009
  $clean = preg_replace('~(^[^a-z0-9]+)|([^a-z0-9]+$)~i', '', $str);
2 голосов
/ 29 октября 2009

Вы можете заменить весь свой код следующим образом:

$test = preg_replace('/[^a-zA-Z0-9]+/', '_', $test);
$test = trim($test, '_');

Первый заменит все вхождения одного или нескольких недопустимых символов на _, а второй удалит все оставшиеся _ от начала и до конца.

2 голосов
/ 29 октября 2009

Вы можете использовать trim () :

$test = trim($test, '_-');
echo $test;

"!" не пройдет мимо первого регулярного выражения.

1 голос
/ 29 октября 2009
[a-zA-Z0-9].*[a-zA-Z0-9]

Значение: прочитайте любой буквенно-цифровой символ, затем прочитайте как можно больше, убедившись, что в конце мы можем получить хотя бы один буквенно-цифровой символ.

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