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

有没有比“正则表达式” 更简单直观的匹配技术?

  •  
  •   James369 · 62 天前 · 5388 次点击
    这是一个创建于 62 天前的主题,其中的信息可能已经有所发展或是发生改变。
    正则表达式:是很强大但感觉还是稍微复杂了一点,并且可读性也有点差。

    我现在有个小需求:
    1. 能够匹配一行字符(就一行不超过 100 个字符,能够匹配内部的英文数字符号等各种字符)。
    2. 简单直观易上手(也就是说新手小白看 5 分钟就可以上手自己编写规则)。
    第 1 条附言  ·  61 天前
    找到了一个:grok,通过预定义规则的方式。
    第 2 条附言  ·  61 天前
    #9 楼的方案也不错,要是支持中文更好。
    39 条回复    2021-08-17 22:08:34 +08:00
    ViggoSite
        1
    ViggoSite   62 天前
    没有,自己写一个
    James369
        2
    James369   62 天前
    @ViggoSite 你说得有道理,目前想到就是在正则表达式之上 定义一堆预制的模板,让小白直接操作模板。
    不过如果需要自己定制模板,又得回到正则表达式上来。
    randomboi
        3
    randomboi   62 天前
    复杂的正则表达式的确可读性差,不过满足你这个小需求的应该比较简单
    ch2
        4
    ch2   62 天前
    自动机本来就不是给非专业的用户用的
    James369
        5
    James369   62 天前
    @ch2 参考“少儿编程”、“汉语编程”, 在核心上套一层马甲,让非专业用户可以亲近和接触
    512357301
        6
    512357301   62 天前 via Android
    正则有简写和非简写模式,非简写模式比较符合认知
    简写看起来简洁,但是可读性不太好,非简写看起来冗长但是可读性好
    loading
        7
    loading   62 天前
    写一大堆 if else 然后用 find replace,清晰明了。
    agagega
        8
    agagega   62 天前 via iPhone   ❤️ 2
    直接做成可视化吧,拖 DFA 来构造正则表达式🐶
    kilasuelika
        9
    kilasuelika   62 天前 via Android   ❤️ 5
    看看这个:Simple Regex Language
    https://simple-regex.com/
    xiangyuecn
        10
    xiangyuecn   62 天前   ❤️ 2
    然后做出一个比正则表达式还复杂的东西🐶
    zerofancy
        11
    zerofancy   62 天前 via Android
    类似 word 的通配符自己撸一套?
    sutra
        12
    sutra   62 天前   ❤️ 2
    @kilasuelika 这个 SRL 看着,我怎么宁愿看正则表达式呢。哈哈
    MrKrabs
        13
    MrKrabs   62 天前
    可读性不该搞个 parser 吗
    Alexhex
        14
    Alexhex   62 天前
    正则+注释
    binux
        15
    binux   62 天前 via Android
    你这需求不完整啊,按照最小实现,精确匹配就能满足你的能够匹配一行字符,无限长度,包含内部任意字符的要求。
    szzhiyang
        16
    szzhiyang   62 天前
    没有。
    szzhiyang
        17
    szzhiyang   62 天前
    正则表达式的可读性问题可以用注释解决。
    fpure
        18
    fpure   62 天前
    自己手写个有穷自动机?
    wolfie
        19
    wolfie   62 天前
    什么语言
    Java 有个 Charmatcher
    musi
        20
    musi   62 天前
    手动用状态机写个 parser,然后再封装一层
    SingeeKing
        21
    SingeeKing   62 天前 via iPhone   ❤️ 1
    @kilasuelika 这东西哪里 simple 了… 觉得学这套语法还不如直接去学正则更快一点。。。
    ily433664
        22
    ily433664   62 天前
    设定好几个规则然后再转换成正则
    Trim21
        23
    Trim21   62 天前 via Android
    glob 和扩展过的 glob 吧
    jupiter157
        24
    jupiter157   62 天前 via iPhone
    有两个想法,一是常用的设定别名,如 emailAddress, ipAddress
    二是提供正反例,自动生成表达式。
    nil333
        25
    nil333   62 天前
    就我的知识水平只能说没有。如果有的话希望大佬可以 @我
    akira
        26
    akira   62 天前
    那你需要 的是正则的基础功能,
    那其实正则也满足你这 2 点要求了啊。。
    Pagliacii
        27
    Pagliacii   62 天前   ❤️ 1
    PolarBears
        28
    PolarBears   62 天前   ❤️ 1
    没有吧,要不看看 Grok?虽然本身也是预定义了一堆表达式的正则
    https://grokdebug.herokuapp.com/patterns#
    swsh007
        29
    swsh007   61 天前 via Android
    还是正则好了
    shihira
        30
    shihira   61 天前
    其实有没有可能,比如说输入一组测试样例,然后自动生成合理的正则
    比如我输入 https http ftp sftp,生成`.*tps?`,但最好不要返回`https|http|ftp|sftp`或者`.*`
    sky96111
        31
    sky96111   61 天前
    @SingeeKing 对于英语是第一语言的人确实简单了
    SingeeKing
        32
    SingeeKing   61 天前
    @sky96111 #31 我的感觉一直是自然语言做确定性表达反而会更难受,因为很容易就「自己加戏」然后造成异常
    discrete
        33
    discrete   61 天前
    d7sus4
        34
    d7sus4   61 天前
    就是预定义规则呗, 顶多加个组合规则.
    易用性和通用性本来就是冲突的, 要想完全自定义规则, 就自己去学正则, 正则真的够好写够简洁了(只是不好读而已).
    aloxaf
        35
    aloxaf   61 天前   ❤️ 1
    @shihira grex 、regexgen

    但通过 https http ftp sftp 推断出 .*tps? 是不可能的,两者范围相差太大了
    raptor
        36
    raptor   61 天前   ❤️ 2
    这玩意儿简单了功能就弱了,没什么意思,还不如 RE 一把梭。反正比它强的比它更复杂,比它简单的又没它强。
    sky96111
        37
    sky96111   61 天前 via Android
    @SingeeKing 其实秉持着最简化祈使句就不容易「自己加戏」了,程序只需要做好一些同义词替换
    Stain5
        38
    Stain5   61 天前
    英语在国内要达到 IELTS 8866 才能考虑移民,不然出去了你也无法融入
    secondwtq
        39
    secondwtq   59 天前
    Parser Combinator
    不仅简单,还不比正则弱。
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2132 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:29 · PVG 20:29 · LAX 05:29 · JFK 08:29
    ♥ Do have faith in what you're doing.