php正则表达式替换斜杠和空格和连字符

时间:2014-08-24 16:08:30

标签: php regex

我需要将一些字符串组合引入到一个模式中,即应删除多个空格,双连字符应替换为单个hypen,单个空格应替换为单个连字符。

我已经尝试过这个表达。

$output = preg_replace( "/[^[:space:]a-z0-9]/e", "", $output );
$output = trim( $output );
$output = preg_replace( '/\s+/', '-', $output );

但是这种情况在几个组合中失败了。

我需要帮助才能使所有这些组合完美地运作:

1. steel-black
2. steel- black
3. steel    black

我也应该删除其中任何一个\r\n\t

1 个答案:

答案 0 :(得分:5)

你可以使用这样的东西(感谢better suggestion @Robin):

$s = 'here is  a test-- with -- spaces-and hyphens';
$s = preg_replace('/[\s-]+/', '-', $s);
echo $s;

用一个连字符替换任意数量的空白字符或连字符。 您可能还希望使用trim($s, '-')删除任何前导或尾随连字符。也可以在正则表达式中直接执行此操作,但我认为不要更清楚。

输出:

here-is-a-test-with-spaces-and-hyphens

如果您要删除其他字符,只需将它们添加到括号表达式中,例如/[()\s-]+/也会删除括号。但是,您可能更愿意只替换所有非单词字符:

$s = 'here is  a test- with -- spaces ( ), hyphens (-), newlines
    and tabs (  )';
$s = trim(preg_replace('/[\W]+/', '-', $s), '-');
echo $s;

使用连字符替换[a-zA-Z0-9_]以外的任意数量的字符,并删除任何前导和尾随连字符。

输出:

here-is-a-test-with-spaces-hyphens-newlines-and-tabs