PHP preg_replace奇怪的字符不起作用

时间:2017-10-14 01:27:52

标签: php regex preg-replace

我有以下代码,但由于某种原因,字符不会被替换....

test.php的

<?php
$s = 'AABBCC����ˮ��������Ƽ���� �˾XXYYZZ';
$softwareVersion = preg_replace('[^a-zA-Z\d\s\.]', '', $s);
echo $softwareVersion . "\n";

我得到了什么

jeffreylroberts:~$ php test.php
AABBCC����ˮ��������Ƽ���� �˾XXYYZZ
jeffreylroberts:~$

我期待的是什么

jeffreylroberts:~$ php test.php
AABBCC XXYYZZ
jeffreylroberts:~$

有关如何preg_replace这些字符的任何想法?

2 个答案:

答案 0 :(得分:1)

你忘了在正则表达式中添加一个前导正斜杠,这将为你提供所需的输出:

$softwareVersion = preg_replace('/[^a-zA-Z0-9\d\s\.]/', '', $s);

你也可以这样做,这将删除除字母数字和下划线之外的所有字符:

$softwareVersion = preg_replace('/\W/', '', $s);

答案 1 :(得分:0)

要调整的一些事项:

  • 使用模式分隔符。 /是最常见的一个。
  • 仅在字符类中编写a-z并使用模式末尾的i修饰符/标记来缩短模式长度。
  • 字符类中不需要转义点。
  • 使用+&#34;一个或多个&#34;量词来提高效率。它将匹配连续出现的字符并一次性替换多字符子字符串。

代码:(Demo

$s='AABBCC����ˮ��������Ƽ���� �˾XXYYZZ';
$softwareVersion = preg_replace('/[^a-z\d\s.]+/i','',$s);
echo $softwareVersion . "\n";

输出:

AABBCC XXYYZZ