• PHPPCRE正则解析


    一、前言

    前面的博客里,有对字符集的解析。这里就不是字符集的事儿了,在PHP中很多函数的处理默认是unicode中的UTF-8编码格式。那么废话不多说,直接开始正题。

    二、PHP函数mb_split解析

    1 <?php
    2 $preg_strings = '测、试、一、下';
    3 $preg_str = mb_split('、', $preg_strings);
    4 print_r($preg_str);

    打印结果:

    Array
    (
        [0] => 测
        [1] => 试
        [2] => 一
        [3] =>)

    此函数默认底层解析,以UTF-8的编码格式解析。以分隔符(、)的UNICODE的16进制码点分割字符$preg_strings

    三、PHP函数preg_split解析

    分割字符串“测试一下”

    1 <?php
    2 $strings = '测试一下';
    3 $mb_arr = preg_split('//u', $strings, -1, PREG_SPLIT_NO_EMPTY);
    4 print_r($mb_arr);

    打印结果如下:

    Array
    (
        [0] => 测
        [1] => 试
        [2] => 一
        [3] => 下
    )

    四、PCRE中的/u解析

    在PHP中,正则的定界符可以为#、%、/等等。

    在一个正则中有时后面会有些修饰符。那么他们都是什么意思呢?

    比如:

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

    其中后面的修饰符u代码表以正则匹配以utf-8的编码格式匹配。

    例子一:

    1 <?php
    2 $strings = '测试一下';
    3 $is_true = preg_match_all('%[x{4e00}-x{9fa5}]+%u', $strings, $match);
    4 var_dump($is_true);

    打印结果如下:

    Array
    (
        [0] => Array
            (
                [0] => 测试一下
            )
    
    )

    这里的[x{4e00}-x{9fa5}]是什么意思呢?

    在PHP正则中x用来表示16进制。

    中文的UNICODE码点在4E00 - 9FFF (这里说的都是16进制)

    所以,正则匹配写法就是区间[],[x{4E00}-x{9FFF}]

    这两个正则的效果都是一样的。

    五、尾言

    今天的随笔到这就完事了,借此分享。

  • 相关阅读:
    我终于会手打lct了!
    [模板]Dijkstra-优先队列优化-单源最短路
    99999999海岛帝国后传:算法大会
    正在加载中。。。。。
    【题解】CF1054D Changing Array(异或,贪心)
    【题解】P4550 收集邮票(概率期望,平方期望)
    【题解】CF149D Coloring Brackets(区间 DP,记忆化搜索)
    【笔记】斜率优化 DP
    CSP2021 游记
    【题解】洛谷P1502 窗口的星星
  • 原文地址:https://www.cnblogs.com/cleverstone/p/9516687.html
Copyright © 2020-2023  润新知