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

各位老哥,正则怎么写能排除一个或多个特定的 IP,匹配剩余所有 IP(或者说是否可以实现)

  •  
  •   cpxjaz · 2023-02-17 17:19:03 +08:00 · 1636 次点击
    这是一个创建于 682 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题

    第 1 条附言  ·  2023-02-17 17:55:20 +08:00
    说明一下,是用来给安全设备做自定义规则的,可以保证输入的数据是标准的 IP 格式
    目前来看 7#老哥给的没问题,感谢
    附回复:^(?!(特定 IP1|特定 IP2|特定 IP3)\b)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
    18 条回复    2023-02-19 00:23:08 +08:00
    lzhd24
        1
    lzhd24  
       2023-02-17 17:21:54 +08:00 via Android
    不可以,建议用其他命令
    v2eb
        2
    v2eb  
       2023-02-17 17:26:18 +08:00 via Android
    来个示例
    eason1874
        3
    eason1874  
       2023-02-17 17:28:32 +08:00
    连续 IP 就用 CIDR 判断,不连续就用表,要是嫌字符串太大可以先把 IP 转为整数
    cpxjaz
        4
    cpxjaz  
    OP
       2023-02-17 17:29:12 +08:00
    @lzhd24 好的谢谢,我再看看
    cpxjaz
        5
    cpxjaz  
    OP
       2023-02-17 17:29:53 +08:00
    @v2eb 例子的话就是一条规则,匹配除了 1.1.1.1,2.2.2.2 之外的所有 IP
    cpxjaz
        6
    cpxjaz  
    OP
       2023-02-17 17:30:33 +08:00
    @eason1874 不是的老哥,不是写程序,安全设备自定义规则
    yigecaiji
        7
    yigecaiji  
       2023-02-17 17:31:50 +08:00 via Android   ❤️ 1
    ^(?!(特定 IP1|特定 IP2|特定 IP3)\b)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
    chatgpt 给的,我试了几个简单的 ip 是可以用的。
    retrocode
        8
    retrocode  
       2023-02-17 17:33:58 +08:00
    以下是使用 JavaScript 编写的正则表达式,用于匹配除了特定的 IP 地址之外的所有 IP 地址:

    ```javascript
    const regex = /^(?!特定 IP 地址 1$|特定 IP 地址 2$|特定 IP 地址 3$)(\d{1,3}\.){3}\d{1,3}$/;

    // 用例
    const ip1 = "192.168.0.1";
    const ip2 = "特定 IP 地址 1";
    const ip3 = "10.0.0.1";

    console.log(regex.test(ip1)); // true
    console.log(regex.test(ip2)); // false
    console.log(regex.test(ip3)); // true
    ```

    在这个 JavaScript 正则表达式中,与之前的正则表达式相同,使用了负向零宽断言 (?!...) 来匹配除了特定的 IP 地址之外的所有 IP 地址。该正则表达式还使用了捕获组 ( ) 来匹配由点分隔的四个数字组成的 IP 地址,并使用量词 {1,3} 来指定每个数字的取值范围。

    你需要将 特定 IP 地址 1 ,特定 IP 地址 2 和 特定 IP 地址 3 替换为你想要排除的实际 IP 地址。
    retrocode
        9
    retrocode  
       2023-02-17 17:34:46 +08:00
    @retrocode #8 chatgpt 是真的好用, 最近写正则都是丢给它来写
    cpxjaz
        10
    cpxjaz  
    OP
       2023-02-17 17:36:32 +08:00
    @yigecaiji ok 感谢,我试试
    cpxjaz
        11
    cpxjaz  
    OP
       2023-02-17 17:37:31 +08:00
    @retrocode 不是编程,是安全设备的自定义规则,不过还是谢谢啦
    v2eb
        12
    v2eb  
       2023-02-17 17:39:51 +08:00 via Android
    估计进来的都是 ip, 检验不严格的话尝试这个
    "!(特定 ip|特定 ip)"
    还是机器好用, 自己想的费劲
    v2eb
        13
    v2eb  
       2023-02-17 17:43:45 +08:00 via Android
    @v2eb 这里有问题, 先别用了
    dcsuibian
        14
    dcsuibian  
       2023-02-17 17:43:46 +08:00
    有库的就用库,别光用正则,很多时候对规则不够了解反而会增加 bug 且使代码阅读困难
    InDom
        15
    InDom  
       2023-02-17 17:44:20 +08:00
    请注意给 IP 中间的 . 加 \ 转义
    cpxjaz
        16
    cpxjaz  
    OP
       2023-02-17 17:44:30 +08:00
    @v2eb 这个不行,最开始试过,目前简单测了下,7#的老哥给的可以
    lzgshsj
        17
    lzgshsj  
       2023-02-17 17:56:57 +08:00
    这下被 chatgpt 替代了😵
    snw
        18
    snw  
       2023-02-19 00:23:08 +08:00 via Android
    ChatGPT 给的这答案虽然能用,但有些怪。

    要是输入的本来就是合法 IP ,那么后面直接用.*捕捉就行。
    要是输入的不保证是合法 IP ,那么应该用准确的 IP 正则判断,不然来个 256.256.256.256 也过了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1240 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 17:57 · PVG 01:57 · LAX 09:57 · JFK 12:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.