REGEX(在PHP中)..删除末尾的非字母数字字符?

时间:2009-10-29 19:19:20

标签: php regex

$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 个答案:

答案 0 :(得分:3)

  $clean = preg_replace('~(^[^a-z0-9]+)|([^a-z0-9]+$)~i', '', $str);

答案 1 :(得分:2)

您可以使用trim()

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

“!”不会超过第一个正则表达式。

答案 2 :(得分:2)

您可以用以下代码替换整个代码:

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

第一个将使用_替换所有出现的一个或多个非法字符,第二个将从开头和结尾移除剩余的_

答案 3 :(得分:1)

[a-zA-Z0-9].*[a-zA-Z0-9]

含义:阅读任何字母数字字符,然后尽可能多地阅读,确保我们最终可以获得至少一个字母数字字符。