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

请教前辈们一个正则表达式

  •  
  •   Yukee798 2021-06-02 09:07:26 +08:00 2429 次点击
    这是一个创建于 1597 天前的主题,其中的信息可能已经有所发展或是发生改变。

    验证输入的字符串,类似如下结构

    [4,10,12,#,10] 

    要求里面的元素可以是 #,也可以是数字,如果是数字的话取值范围必须在 [3,37] 范围内。 对正则不是很熟悉,查了半天也没写出来。

    15 条回复    2021-06-02 19:31:12 +08:00
    xiangyuecn
        1
    xiangyuecn  
       2021-06-02 09:25:30 +08:00   1
    不要为难正则表达式了 split+一个循环 比写一个巨型正则更快 人类更容易理解
    TomVista
        2
    TomVista  
       2021-06-02 09:27:38 +08:00   1
    \[(((#|[3-9]|[1-2][0-9]|3[0-7]),)*)(#|[3-9]|[1-2][0-9]|3[0-7])\]

    不建议用正则,用字符串操作吧
    TomVista
        3
    TomVista  
       2021-06-02 09:29:05 +08:00
    @TomVista 这个正则没有限制开头和结尾,你自己加一下,$^,
    0ZXYDDu796nVCFxq
        4
    0ZXYDDu796nVCFxq  
       2021-06-02 09:31:25 +08:00 via Android   1
    \[\d+,{3}(#|[3-9]|[1-2]\d|3[0-7]),\d+\]

    你这规则不明确
    是说要求一个类似数组格式的字符串,5 个元素,第 4 个为#或 3-37,其余必须为数字?
    逗号前后的空格是否允许?
    oaix
        5
    oaix  
       2021-06-02 09:34:21 +08:00   1
    ^\[(?:|(?:[3-9]|[12][0-9]|3[0-7]|#)(?:,(?:[3-9]|[12][0-9]|3[0-7]|#))*)\]$

    如果需要匹配空的[],可以用这个
    hafuhafu
        6
    hafuhafu  
       2021-06-02 09:36:40 +08:00   1
    只会这种写法...
    ```
    \[(([4-9]|3[0-7]?|[1-2]\d|#),)+([4-9]|3[0-7]?|[1-2]\d|#)\]
    ```
    lujie2012
        7
    lujie2012  
       2021-06-02 09:48:15 +08:00   1
    $^\[([0~9,#]){0, 70}\]$^

    表达式很难写,因为你是规律的 xx, xxx, xx, 你不如直接切割变成 list 然后遍历其中的元素。这样的规范表达式不如写函数方法。我上面的写的是希望你理解一下,推荐你买一本 正则表达式书籍,系统的学习一下,不难,很简单。绿皮的那本书
    emric
        8
    emric  
       2021-06-02 09:52:03 +08:00   1
    我猜楼主想要的是这个:
    \[((#|[3-9]|[1-2][0-9]|3[0-7]),?)*\]
    TomatoYuyuko
        9
    TomatoYuyuko  
       2021-06-02 09:56:58 +08:00
    split 写快多了,能不用正则就不要用,数组操作多爽啊
    balabalaguguji
        10
    balabalaguguji  
       2021-06-02 09:59:16 +08:00
    用工具测试下就好啦 https://tools.fun/regexp.html
    luckyrayyy
        11
    luckyrayyy  
       2021-06-02 10:15:35 +08:00   3
    当你想用正则解决一个问题,那么你就有了两个问题。
    shyangs
        12
    shyangs  
       2021-06-02 10:34:15 +08:00
    如果你有一,想用正表式解,那你就有了。
    ungrown
        13
    ungrown  
       2021-06-02 13:2959 +08:00
    正则是个好东西,但是别啥都用正则,你把字符串掐头去尾再分隔开来处理,不是轻松愉快吗?
    一个复杂的正则匹配难道运行效率就不低了?
    BeautifulSoap
        14
    BeautifulSoap  
       2021-06-02 13:43:08 +08:00 via Android
    那啥,正则性能挺差的,尤其你这种奇怪的需求,能不同正则就别用
    xiangchen2011
        15
    xiangchen2011  
       2021-06-02 19:31:12 +08:00
    @shyangs 这话说得对
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5909 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 02:01 PVG 10:01 LAX 19:01 JFK 22:01
    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