php如何用正则表达式匹配中文

下面是网上搜索关于正则表达式匹配中文的常见版本。 

js /[\u4e00-\u9fa5]+/
php /[\x7f-\xff]+/

今天这里主要是针对php的版本做下扩展,其实,php版本也是能利用js那个版本进行匹配的。 
很多人可能已经写过并遇到了这个报错:

Warning: preg_match_all(): Compilation failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 2

那么,我们要怎么解决呢?

很简单,就是这样:

/[\x{4e00}-\x{9fa5}]+/u

因此,想要利用php匹配中文,有两种写法:

  1. /[\x7f-\xff]+/
  2. /[\x{4e00}-\x{9fa5}]+/u

下面是一段是用php运行正则测试代码的例子,有兴趣的朋友可以看看运行结果(本文由 www.uuhuihui.com 整理):

<?php
//临时启用全局错误提示
ini_set('display_errors', true);
error_reporting(E_ALL);
$linkeBreak = (PHP_SAPI == 'cli') ? "\n" : '<br>';
$str = '中文汉字English';
$patternArr = array(
                    '/[\u4e00-\u9fa5]+/',
                    '/[\x{4e00}-\x{9fa5}]+/u',
                    '/[\x7f-\xff]+/',
                );
foreach($patternArr as $pattern) {
    echo "Pattern: {$pattern} {$linkeBreak}";
    var_dump(testRegexpMatch($pattern, $str));
    echo $linkeBreak;
}
/**
 * 测试正则匹配
 * @param  string $pattern 正则表达式
 * @param  string $string  源字符串
 * @return array
 */
function testRegexpMatch($pattern, $string) {
    try {
        preg_match_all($pattern, $string, $matches);
    } catch (Exception $e) {
        return array(
                     'stauts' => false,
                     'msg'    => $e->getMessage(),
                     'matches' => array(),
                     );
    }
    return array(
                 'stauts'     => true,
                 'msg'        => 'Success',
                 'matches'    => $matches,
                 );
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值