PHP Preg - 替换多个下划线

时间:2009-11-13 14:22:00

标签: php regex preg-replace

如何使用preg_replace用一个下划线替换多个下划线?

8 个答案:

答案 0 :(得分:18)

+运算符匹配最后一个字符(或捕获组)的多个实例。

$string = preg_replace('/_+/', '_', $string);

答案 1 :(得分:9)

preg_replace('/[_]+/', '_', $your_string);

答案 2 :(得分:7)

实际上使用/__+//_{2,}/会比/_+/更好,因为不需要替换单个下划线。这将提高preg变种的速度。

答案 3 :(得分:5)

运行测试,我发现了这个:

while (strpos($str, '__') !== false) {
    $str = str_replace('__', '_', $str);
}

始终比这更快:

$str = preg_replace('/[_]+/', '_', $str);

我生成了不同长度的测试字符串:

$chars = array_merge(array_fill(0, 50, '_'), range('a', 'z'));
$str = '';
for ($i = 0; $i < $len; $i++) {  // $len varied from 10 to 1000000
    $str .= $chars[array_rand($chars)];
}
file_put_contents('test_str.txt', $str);

并使用这些脚本进行测试(单独运行,但在 $ len 的每个值的相同字符串上运行):

$str = file_get_contents('test_str.txt');
$start = microtime(true);
$str = preg_replace('/[_]+/', '_', $str);
echo microtime(true) - $start;

$str = file_get_contents('test_str.txt');
$start = microtime(true);
while (strpos($str, '__') !== false) {
    $str = str_replace('__', '_', $str);
}
echo microtime(true) - $start;

对于较短的字符串, str_replace()方法比 preg_replace()方法快25%。字符串越长,差异越小,但 str_replace()总是更快。

我知道有些人更喜欢一种方法而不是速度之外的其他方法,我很乐意阅读关于结果,测试方法等的评论。

答案 4 :(得分:1)

preg_replace()

需要+运算符

$text = "______";
$text = preg_replace('/[_]+/','_',$text);

答案 5 :(得分:0)

我不是你想要使用preg_replace的原因,但是有什么问题:

str_replace('__', '_', $string);

答案 6 :(得分:0)

This will Accept Only Characters,numeric value or Special Character found it will replace with _
<?php
error_reporting(0);
if($_REQUEST)
{
    PRINT_R("<PRE>");
    PRINT_R($_REQUEST);
    $str=$_REQUEST[str];
    $str=preg_replace('/[^A-Za-z\-]/', '_', $str);
    echo strtolower(preg_replace('/_{2,}/','_',$str));
}
?>
<form action="" method="post">
<input type="text" name="str"/>
<input type="submit" value="submit"/>
</form>

答案 7 :(得分:0)

您还可以使用具有自动定界符的T-Regx library

pattern('_+')->replace($your_string)->with('_');