我需要将一些字符串组合引入到一个模式中,即应删除多个空格,双连字符应替换为单个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
。
答案 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