php 正则表达式 : how to match number + letters + Chinese

标签 php regex

我正在尝试处理包含字母、数字、中文和一些标点符号的字符串,只留下数字、字母和中文,如下所示

原始字符串

a>b%%c##1@23测$$试??\\:.##,,??!!

结果

abc123测试

对于中文,preg_replace('/\P{Han}+/u', '', $text) 完美工作

测试 // result

对于数字和字母,preg_replace('/[^0-9a-zA-Z]/', '', $text) 也有效。

abc123 // result

但是我怎样才能将它们结合起来呢?

为什么 preg_replace('/[\P{Han}]|[0-9a-zA-Z]/u', '', $raw); 不能按预期工作?

非常感谢大家的帮助!

最佳答案

你需要

preg_replace('~[^0-9a-zA-Z\p{Han}]+~u', '', $raw)

请参阅regex demo .

[^0-9a-zA-Z\p{Han}]+ 是一个否定字符类,匹配除 ASCII 数字、ASCII 字母和任何中文字符之外的任何一个或多个字符.

在此模式中使用 u 标志非常重要,因为您的输入是 Unicode 字符串。

请参阅PHP demo :

$raw = 'a>b%%c##1@23测$$试??\\:.##,,??!!';
echo preg_replace('~[^0-9a-zA-Z\p{Han}]+~u', '', $raw);
// => abc123测试

关于php 正则表达式 : how to match number + letters + Chinese,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68907713/

相关文章:

javascript - 通过 $_GET 访问 URL 中的 # 字符

objective-c - 删除斜线之前的字符串,Objective C

php - 正则表达式求反数

Java 正则表达式

regex - 查找在单词末尾或点前具有 "<-"的所有单词

php - 为什么这种使用 PDO 计算 Mysql 行数的方法不起作用?

php - 使用 Laravel 和 Vue.js 的 CRUD 问题

javascript - 如何在页面加载之前显示 reCAPTCHA

php - 在 Laravel 中,如果已经检查了中间件,我应该检查 Controller 中的权限吗?

regex - 使用 Notepad++ 查找不以分号开头的字符串