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

求个正则,如何匹配不在首尾的指定字符?

  •  
  •   lihongming · 2018-06-07 08:22:17 +08:00 via Android · 1604 次点击
    这是一个创建于 496 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如我要匹配[0-9]+,但首尾的不匹配(首尾的连续数字都忽略),应该如何写呢?

    例:123abc45d678efg90,应该匹配到 45 和 678

    11 回复  |  直到 2018-06-08 10:41:06 +08:00
        1
    ryd994   2018-06-07 08:26:12 +08:00 via Android
    头尾用^[0-9]*先过滤掉
        2
    ryd994   2018-06-07 08:27:23 +08:00 via Android
    呃,^[0-9]+ 和 [0-9]+$
        3
    ryd994   2018-06-07 08:32:03 +08:00 via Android
    如果你是要 group capture 的话
    ^[0-9]*[^0-9]+([0-9]+)[^0-9]+[0-9]*$
    这样大概能行
        4
    eggshell   2018-06-07 08:39:15 +08:00
    零宽断言可以做到 (?<!^)(?<!\d+)\d+(?!\d+)(?!$)
    不过 应该有更好的写法吧。。
        5
    zynlp   2018-06-07 08:39:32 +08:00 via iPhone
    用断言吧
        6
    Removable   2018-06-07 08:43:29 +08:00
    零宽断言应该可以的,不过如果你是用在 js 里的话,那除了 Chrome 外的浏览器都不支持后发断言
        7
    eggshell   2018-06-07 08:43:52 +08:00
    (?<!^\d*)\d+(?!\d+)(?!\d*$)
        8
    liberize   2018-06-07 14:32:39 +08:00
        9
    lihongming   2018-06-07 15:36:01 +08:00 via Android
    @liberize 多谢,我对正则没学那么深入,这我都看不懂😂
        10
    flowfire   2018-06-08 10:28:49 +08:00 via iPhone
    @Removable Chrome 支持后发断言了?什么时候的事
        11
    Removable   2018-06-08 10:41:06 +08:00
    @flowfire #10 不知道,我大概一个多月前用 js 写零宽断言的时候,在 Chrome 上一直没问题,当时我还很好奇资料上为什么说 js 不支持后发断言。
    后来测试人员说 ie 上有 bug,我才发现 ie 和火狐都不能正常使用后发断言,只有 chrome 可以
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4174 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 07:37 · PVG 15:37 · LAX 00:37 · JFK 03:37
    ♥ Do have faith in what you're doing.