代码之家  ›  专栏  ›  技术社区  ›  502_Geek

如何让preg\u将2位数字点(可选)与中文匹配?[副本]

  •  2
  • 502_Geek  · 技术社区  · 6 年前

    我试着找出汉字的preg\u匹配。我可以用这样的方式得到汉字

    preg_match("/^\p{Han}+/u", $message); //$message = '你好';
    

    但是,有时是两位数。在这样的地方

    $message = '01. 你好' //or '21. 你好'
    

    因此,我的preg\u匹配条件在此消息中不正确。如何用点检查此可选两位数?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Phil    6 年前

    尝试 /\p{Han}+/gu 例如:

    preg_match("/\p{Han}+/u", $message,$result);
    

    preg_match_all("/\p{Han}+/u", $message,$result);
    
        2
  •  1
  •   Allan    6 年前

    你能看看下面的吗 php 仅用于匹配和提取汉字的原型代码?让我知道它是否如预期的那样对您有效。

    $ more test.php test2.php
    ::::::::::::::
    test.php
    ::::::::::::::
    <?php
    $string = 'abc 123 車飛行 abc 5344';
    $pattern = '/[^\p{Han}]/u';
    $replacement = '';
    echo preg_replace($pattern, $replacement, $string);
    ?>
    ::::::::::::::
    test2.php
    ::::::::::::::
    <?php
    $message = "01. 你好";
    echo preg_match_all("/^\p{Han}+$/u", $message);
    echo "\n";
    $message = "你好";
    echo preg_match_all("/^\p{Han}+$/u", $message);
    echo "\n";
    $message = "01。你好";
    echo preg_match_all("/^\p{Han}+$/u", $message);
    echo "\n";
    ?>
    

    两个代码的输出为:

    1) 以便仅从字符串中提取中文字符。

    $ php test.php                                                                                                                                 
    車飛行
    

    2) 以验证字符串是否只包含中文字符。

    $ php test2.php                                                                                                                                
    0
    1
    0