V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ioc
V2EX  ›  问与答

正则大佬进来看看,被正则折磨死了,如何匹配除了某个关键词的所有字符?

  •  
  •   ioc · 2017-08-20 13:21:54 +08:00 · 1786 次点击
    这是一个创建于 2658 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如关键字为 abc,那么:

    * 不匹配:
    * abc
    * 会匹配:
    * 若干字符+abc,例如:zzxx123abc
    * abc+若干字符,例如:abczzxx123
    * 若干字符+abc+若干字符,例如:abczzxx123abczzxx
    * 任意字符,例如:asdaexx111fzcsd,123aaaa1223

    也就是说除了 abc 不匹配外,其他 **任何** 字符串都是完全匹配。

    昨天看了一晚上正则,只试出来了这个最接近目标 `(?!abc).*`,但是不完美。

    这个目标能够实现吗?
    ioc
        1
    ioc  
    OP
       2017-08-20 13:43:04 +08:00 via Android
    我记得我是用 Markdown 编辑的啊。。
    code42
        2
    code42  
       2017-08-20 15:18:00 +08:00   ❤️ 1
    能!但是不优雅:
    '[^a].*|a[^b].*|ab[^c].*|abc.+'


    PS:
    前几天遇到类似问题(将不符合某个模式的行挑出来),没能想出来好用的正则,就换种思路了。
    如下:(也不想为这点小事写个 python 脚本什么的,只希望快速搞定,一行命令行那是最好的:)
    ➜ ~ cat data.txt
    abc
    zzxx123abc
    abczzxx123
    abczzxx123abczzxx
    asdaexx111fzcsd
    123aaaa1223

    ➜ ~ awk '!/^abc$/ { print $0 }' data.txt
    zzxx123abc
    abczzxx123
    abczzxx123abczzxx
    asdaexx111fzcsd
    123aaaa1223

    如果你的需求和我类似,完全可以使用这种方式。
    fox0001
        3
    fox0001  
       2017-08-20 15:55:34 +08:00
    天啊,直接判断不等于字符串“ abc ”就可以了吧?
    ioc
        4
    ioc  
    OP
       2017-08-20 16:17:49 +08:00 via Android
    @code42 awk 倒是能够直接取反,可这恶心的正则就没直接点的取反语法。模式串一长就尴尬了,只能凑合用了,感谢。
    @fox0001 SpringMVC 的 @RequestMapping 路径匹配,不能直接获取的。
    ioc
        5
    ioc  
    OP
       2017-08-20 19:44:09 +08:00 via Android
    @code42 测试中发现,不能匹配到 a 和 ab,请问如何解决?
    code42
        6
    code42  
       2017-08-20 20:17:40 +08:00
    @ioc 果不其然(不优雅的解,总是可能潜伏着 bug )
    '(?:^(?:a|ab)$)|[^a].*|a[^b].*|ab[^c].*|abc.+'
    walleL
        7
    walleL  
       2017-08-20 20:59:43 +08:00 via Android
    另外配一个路径只匹配 abc
    行吗?
    br00k
        8
    br00k  
       2017-08-20 21:01:37 +08:00   ❤️ 1
    没太看明白。。😄试试这个^((?!abc)|abc).+$
    code42
        9
    code42  
       2017-08-20 22:37:52 +08:00
    @br00k 这大概是最优雅的解了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1896 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:24 · PVG 00:24 · LAX 08:24 · JFK 11:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.