首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

PHP 果然是最好的语言之正则的兼容问题。

  •  
  •   ChoateYao · 2016-03-09 12:04:40 +08:00 · 2649 次点击
    这是一个创建于 1262 天前的主题,其中的信息可能已经有所发展或是发生改变。

    测试一个匹配字母和数字的正则:

    pattern='/^\w+$/'
    string='人 1994'
    

    PHP 结果

    Array
    (
        [0] => 人 1994
    )
    

    Javascript 结果

    匹配不到数据

    结论
    PHP 是世界上最好的语言,我在这个细节上浪费了 30 分钟。

    如果要匹配字母和数字最好使用以下方法:

    /^[a-zA-Z\d_]+$/
    
    第 1 条附言  ·  2016-03-09 12:56:37 +08:00
    空格问题是 V2 编辑器造成的。
    第 2 条附言  ·  2016-03-09 13:00:28 +08:00
    http://php.net/manual/zh/regexp.reference.character-classes.php

    嗯,作为官方文档。可以让一些没有看过文档的人闭嘴了。

    然后使用[:alnum:]和\w 的结果是一样的。
    第 3 条附言  ·  2016-03-09 13:01:42 +08:00
    然后你们做测试的时候难道不会替换字符吗?
    如果我把"人"替换成其他字符呢?
    29 回复  |  直到 2016-03-10 15:04:17 +08:00
        1
    milklee   2016-03-09 12:14:04 +08:00
    虽然在 js 里 \w 是不能匹配到汉字的。。但是按照标准来说,\w 也不会匹配空格才对

    所以为什么在 php 里 /^\w+$/ 会匹配到 '人 1994' 中间的空格?= =
        2
    Strikeactor   2016-03-09 12:14:50 +08:00


    顺便楼主例子错了,你字符串中间有空格, PHP 的匹配结果也是空的

        3
    wjfz   2016-03-09 12:15:53 +08:00
    莫非是 V2E 自动加的空格?

    这个孩子是 1994 年生的。
        4
    wjfz   2016-03-09 12:16:16 +08:00   ♥ 1
    果然是 V2 自动加的空格。
        5
    cccRaim   2016-03-09 12:16:59 +08:00
    一般来说, js 后面要加个 g 才是正常的匹配结果
        6
    drush   2016-03-09 12:22:33 +08:00
    排除 v2 自動加空格,有什麼問題?
        7
    xuboying   2016-03-09 12:23:07 +08:00 via Android   ♥ 1
    感觉用\w 匹配汉字由 locale 决定,保险起见我只用\p{Han}
        8
    4641585   2016-03-09 12:28:10 +08:00
    @wjfz

    V2 加空格不会加到代码段里吧
        9
    lianz   2016-03-09 12:28:21 +08:00
    RTFM
    又是一个不看文档就直接喷的人,你干嘛不去喷飞机能在天上飞、火车能在铁轨上跑、自行车能骑呢。
        10
    zakokun   2016-03-09 12:35:17 +08:00   ♥ 2
    PHP 确实有很多缺点.
    但是普通程序员还没那个资格喷吧?
        11
    dangyuluo   2016-03-09 12:55:57 +08:00
    @zakokun yes
        12
    eoo   2016-03-09 13:50:14 +08:00
    .......................
        13
    BOYPT   2016-03-09 13:53:59 +08:00   ♥ 1
    有啥好争的,本来 regex 就有好几种口味,较流行的就是 php/js/python 几种口味
    https://regex101.com/ 可以在线测试
        14
    eoo   2016-03-09 13:54:49 +08:00
    @Strikeactor 这是什么网站?
        15
    matsuijurina   2016-03-09 13:57:01 +08:00 via Android
    当时 V2EX 自动加空格的时候就有人预料到会出现楼主这样的问题,认为不能为了排版的美观影响了内容的表达。
        16
    Jaylee   2016-03-09 14:03:22 +08:00   ♥ 1


    是我姿势有问题? 怎么什么阿猫阿狗都来喷?
        17
    ChoateYao   2016-03-09 14:27:45 +08:00
        19
    slixurd   2016-03-09 14:31:42 +08:00
    我觉得是字符集问题,试了一下几个 online 的 php 运行平台,有的可以有的不行
    版本没有什么影响,另外楼上的别随便喷啊,别人的运行环境都没了解....
        20
    phithon   2016-03-09 14:37:06 +08:00   ♥ 1
    还是跟本地编码有关系吧,允许是 php 一个 bug 吧。
    国外的机器是没问题的: https://3v4l.org/rNgfi
    语言有坑也正常,任何语言都有自己的坑和 BUG 。你浪费了 30 分钟,只能说明你看不穿这个问题,还得多多学习怎么解决问题,而不是怪别人。
        21
    eoo   2016-03-09 14:40:19 +08:00
    @Jaylee 你这个没啥问题啊
        22
    jfcherng   2016-03-09 15:52:07 +08:00
    /^\w+$/u 匹配成功!?
    https://3v4l.org/mklML
        23
    kungfuchicken   2016-03-09 17:27:53 +08:00
    我在 Mac 上测试 PHP ( mac port 安装)是可以匹配到“人”的,但是在 Cent OS 上测试了几个版本的 PHP (编译安装和 yum 安装都有,跟 Mac 版本相同)都是匹配不到的

    这个不是 PHP 的锅,而是 PCRE 库的配置导致,\w 的匹配官方文档是这么说的

    A "word" character is any letter or digit or the underscore character, that is, any character which can be part of a Perl "word". The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale-specific matching is taking place. For example, in the "fr" (French) locale, some character codes greater than 128 are used for accented letters, and these are matched by \w.

    也就是说, PCRE 库的 character tables 配置会影响到\w 的匹配
        24
    yaxin   2016-03-09 18:38:39 +08:00
    @Strikeactor 什么编辑器,这么好
        25
    Strikeactor   2016-03-09 18:51:51 +08:00
        26
    yaxin   2016-03-09 19:10:26 +08:00
    @Strikeactor 谢谢,不错的编辑器,而且也不贵
        27
    ming2281   2016-03-09 19:44:44 +08:00   ♥ 1
    js 支持的正则元素不完整(指流行的 Perl 风格)
        28
    flynaj   2016-03-10 14:15:37 +08:00
    EmEditor \w 可以匹配中文,
    使用 Boost library Regex++ 的正则表达式惯例
    https://zh-cn.emeditor.com/help/howto/search/search_regexp_syntax.htm
        29
    yumijie   2016-03-10 15:04:17 +08:00
    编码的问题好像楼主没考虑

    22 楼的网友考虑了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3931 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 29ms · UTC 06:27 · PVG 14:27 · LAX 23:27 · JFK 02:27
    ♥ Do have faith in what you're doing.