请教一个正则 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Martin9
V2EX    正则表达式

请教一个正则

  •  
  •   Martin9 2019-08-20 09:55:52 +08:00 3514 次点击
    这是一个创建于 2249 天前的主题,其中的信息可能已经有所发展或是发生改变。

    字符串如下: _search=false&nd;=1566206479316&rows;=50&page;=2&sidx;=&sord;=desc&businessType;=&containerTypeId;=&operStatus;=&dispatchStatus;=&portId;=&customerId;=&billNo;=&orderNo;=&containerNo;=&customerOrderNo;=&yhNO;=&storageYardId;=&createBy;=&makeboxBeginDate;=2019-08-01&makeboxEndDate;=2019-08-19&dispatchGroupId;=&cityCode;=&salesmanid;=&relateAddrAddress;=

    target: _search=false&
    nd=1566206479316&
    rows=50&
    page=2
    sidx=&
    sord=desc&
    businessType=&
    makeboxBeginDate=2019-08-01&
    makeboxEndDate=2019-08-19&

    难点是中间有两个日期所以写的很费劲。
    目前在用的:
    (\w+)=(\w*[-]*\w+[-]*\w+)&

    这个正则问题是 page=2 匹不到。page=10,11,12 两位数就可以
    不太懂是什么问题.

    10 条回复    2019-08-20 12:08:25 +08:00
    a494836960
        1
    a494836960  
       2019-08-20 10:10:40 +08:00
    js: replace(/(.*?);?=(.*?)&?/g,'$1=$2\n')
    a494836960
        2
    a494836960  
       2019-08-20 10:12:55 +08:00
    另外你的正则 (\w*[-]*\w+[-]*\w+) 这段有两个 \w+ 所以匹配结果最少要 两位数
    rrfeng
        3
    rrfeng  
       2019-08-20 10:13:30 +08:00
    看着这么整齐不如直接 split 再进一步处理。
    Martin9
        4
    Martin9  
    OP
       2019-08-20 10:18:13 +08:00
    @rrfeng 是一个基类,很多请求都是要通过这个请求,不好改用 split
    Martin9
        5
    Martin9  
    OP
       2019-08-20 10:23:26 +08:00
    @a494836960 thx。我试了下但是效果是这样
    false&nd=
    1566206479316&rows=
    50&page=
    2&sidx=&
    有点岔开了
    xenme
        6
    xenme  
       2019-08-20 10:30:24 +08:00   1
    a494836960
        7
    a494836960  
       2019-08-20 10:30:27 +08:00   1
    /(.*?);?=(.*?)&/g 这样试试。。
    Martin9
        8
    Martin9  
    OP
       2019-08-20 10:39:04 +08:00
    @xenme @a494836960 谢谢已发铜币
    imdong
        9
    imdong  
       2019-08-20 10:53:30 +08:00   1
    (?:^|\&)([^;=]+);?=([^&]+)?(?=$|\&)

    https://regex101.com/r/vzBBz4/3

    最少匹配,\w .* 这样的写法会计算次数太多。
    这种匹配广泛的我建议用 [^] 排除法。
    首末用了两次断言,
    autoxbc
        10
    autoxbc  
       2019-08-20 12:08:25 +08:00   1
    如果你的项目是 js,可以考虑用 URI.js

    每次用正则去匹配结构化的数据,就等于重新写了一遍这种数据结构的解析器
    我们应该重新写解析器吗?不,应该用别人已经写好的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5829 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 06:19 PVG 14:19 LAX 23:19 JFK 02:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86