• 请不要在回答技术问题时复制粘贴 AI 生成的内容
James369
V2EX  ›  程序员

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

  •  
  •   James369 · Aug 15, 2021 · 8346 views
    This topic created in 1905 days ago, the information mentioned may be changed or developed.
    正则表达式:是很强大但感觉还是稍微复杂了一点,并且可读性也有点差。

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

    但通过 https http ftp sftp 推断出 .*tps? 是不可能的,两者范围相差太大了
    raptor
    raptor
    Aug 16, 2021❤️2
    36
    这玩意儿简单了功能就弱了,没什么意思,还不如 RE 一把梭。反正比它强的比它更复杂,比它简单的又没它强。
    sky96111
    sky96111
    Aug 16, 2021 via Android
    37
    @SingeeKing 其实秉持着最简化祈使句就不容易「自己加戏」了,程序只需要做好一些同义词替换
    Stain5
    Stain5
    Aug 16, 2021
    38
    英语在国内要达到 IELTS 8866 才能考虑移民,不然出去了你也无法融入
    secondwtq
    secondwtq
    Aug 17, 2021
    39
    Parser Combinator
    不仅简单,还不比正则弱。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3109 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 122ms · UTC 00:06 · PVG 08:06 · LAX 16:06 · JFK 19:06
    ♥ Do have faith in what you're doing.