PHP Preg替换多个下划线

PHP Preg替换多个下划线,php,regex,preg-replace,Php,Regex,Preg Replace,如何使用preg_replace将多个下划线替换为一个下划线?preg_replace(“/[\u]+/”、“\u”、$your_string)操作符匹配最后一个字符(或捕获组)的多个实例 我不知道您想使用preg_replace的原因,但有什么问题: str_replace('__', '_', $string); 需要+运算符 $text = "______"; $text = preg_replace('/[_]+/','_',$text); 运行测试时,我发现: while (st

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

preg_replace(“/[\u]+/”、“\u”、$your_string)

操作符匹配最后一个字符(或捕获组)的多个实例


我不知道您想使用preg_replace的原因,但有什么问题:

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

需要+运算符

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

运行测试时,我发现:

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);
以及:

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


我知道有些人出于速度以外的原因更喜欢一种方法,我很乐意阅读有关结果、测试方法等的评论。

实际上使用
/\uu+/
/{2,}/
/\u+/
更好,因为不需要替换一个下划线。这将提高preg变量的速度。

这将只接受将替换为的字符、数值或特殊字符_
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>
您还可以使用具有自动分隔符的

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

因为它不会将
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu->
(1)等等,不需要定义字符类。这是真的,但我还是这么做了。看来我并不孤单。
$str = file_get_contents('test_str.txt');
$start = microtime(true);
while (strpos($str, '__') !== false) {
    $str = str_replace('__', '_', $str);
}
echo microtime(true) - $start;
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>
pattern('_+')->replace($your_string)->with('_');