这个PHP正则表达式有什么问题?

毕设客栈 论文问答 1
$output = preg_replace("|(/D)(/s+)(/d+)(;)|", "//1,//3;", $output);

我正在尝试替换所有字母字符,后跟一个或多个空格字符(制表符和/或空格),后跟一个或多个数字字符,后跟分号,字母字符后跟逗号,后跟数字,然后分号。

我将提供一个示例:

开始:

hello world      1007;

结尾:

hello world,1007;

回复

共2条回复 我来回复
  • 源码码头
    这个人很懒,什么都没有留下~
    评论

    | 开头和结尾的两个可能是不正确的 - 并且都应该是正斜杠。

    所有其他正斜杠都应该是反斜杠(并且需要转义)。

    由于 PHP 4.04 $n 是引用捕获组的首选方式。

    $output = preg_replace("/(\\D)\\s+(\\d+;)/", "$1,$2", $output);
    

    如果您使用单引号,则不需要转义反斜杠:

    $output = preg_replace('/(\D)\s+(\d+;)/', '$1,$2', $output);
    
    0条评论
  • 代码工坊
    这个人很懒,什么都没有留下~
    评论

    您需要正则表达式中的反斜杠,而不是正斜杠。需要开始和结束管道(或 则表达式的另一个分隔符)

    $x = "hello world      1007;";  
    echo preg_replace('|(\D)(\s+)(\d+)(;)|','$1,$3',$x);
    echo preg_replace('/(\D)(\s+)(\d+)(;)/','$1,$3',$x);
    echo preg_replace('{(\D)(\s+)(\d+)(;)}','$1,$3',$x);
    
    0条评论

发表回复

登录后才能评论