PHP preg_replace 奇数字符无效

PHP preg_replace odd characters not working

我有以下代码,但由于某些原因,字符没有被替换....

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 这些字符有什么想法吗?

您忘记在正则表达式中添加前导和尾随正斜杠,这将为您提供所需的输出:

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

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

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

一些需要调整的地方:

  • 使用模式分隔符。 / 是最常见的。
  • 通过仅在字符 class 中写入 a-z 并在模式末尾使用 i modifier/flag 来减少模式长度。
  • 字符 class.
  • 中不需要转义点
  • 使用+ "one or more"量词提高效率。它将匹配连续出现的字符并一次性替换多字符子字符串。

代码:(Demo)

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

输出:

AABBCC XXYYZZ