1

我正在尝试使用正则表达式来查找空格组并将它们替换为另一个字符,例如 $

 $teststring="00005e-000003 D21    3       0004ea-287342 D21    3       000883-d94982 D21    3       000f20-4c5241 D21    3       002561-e32140 D21    3       003018-a1a24f D21    3       00e039-0fe0fe D21    3       08000f-1eb958 D21    3       08000f-1ec4de D21    3       082e5f-498900 D21    3";
 $pattern='/([0-9A-F]{6})-([0-9A-F]{6}) ([0-9A-F]+)\s{1,}([0-9]{1,})/i'; 

 if (preg_match_all($pattern,$teststring,$matches, PREG_PATTERN_ORDER)) {   
        $data = $matches[0];
 }

这是根据我的模式工作的,如果我在 $data 上执行 print_r,它看起来像:

 Array ( 
          [0] => 00005e-000003 D21 3 
          [1] => 0004ea-287342 D21 3 
          [2] => 000883-d94982 D21 3 

       }

我想做的是用 $ 替换所有空格,所以输出如下所示:

 Array ( 
          [0] => 00005e-000003$D21$3 
          [1] => 0004ea-287342$D21$3 
          [2] => 000883-d94982$D21$3 
  }

你能告诉我我怎么能做到这一点吗?

谢谢。

4

3 回答 3

1

尝试改用 preg_replace

于 2012-09-19T01:02:30.257 回答
1

利用:

$ret = preg_replace('/([\da-f]{6}-[\da-f]{6}) ([\da-f]+)\s+(\d+)/i', '\1$\2$\3', $teststring);
于 2012-09-19T02:54:21.687 回答
1

如果您只想用一个美元符号替换所有空格组,则可以执行以下操作:

preg_replace('/\s+/','$', $subject);

顺便说一句:

  • 您可以使用\d而不是[0-9]匹配一位数字
  • 您可以使用+匹配一个或多个字符而不是{1,}
  • 我认为不要使用//i不区分大小写的搜索,而是让你的十六进制字符类[0-9a-fA-F]更有效率......虽然我没有做腿部工作。
于 2012-09-19T03:00:20.847 回答