【问题标题】:Regex matching anything else but正则表达式匹配除
【发布时间】:2021-06-22 22:50:46
【问题描述】:



所以我有这些价值观:
1.232.123.3.123.214.124.1241245124.123124124.124124.124124.123123123
1.232.123.3.123.214.124.1241245124.123124124.124124.124124.123123123.123.1234.12
1.232.123.3.123.214.124.1241245124.12345555.232

这个想法是它们都有不同的长度。所以我需要匹配前 5 个元素之后的所有内容(我的意思是元素是用“。”分割后产生的值)
所以我需要保留粗体文本
1.232.123.3.123.214.124.1241245124.123124124.124124.124124.123123123
1.232.123.3.123.214.124.1241245124.123124124.124124.124124.123123123.123.1234.12
1.232.123.3.123.214.124.1241245124.12345555.232

基于此,我尝试了以下操作:
([0-9]*[.]){8} 返回根目录(我需要删除的值)
我试图以某种方式匹配其余部分,但似乎没有任何效果 这个匹配最后的 n 个元素,但是这个数字是可变的,并没有太大帮助:(([.][0-9]*){3})$



我需要这样的东西:
为此,我使用了(([.][0-9]*){7})$,但由于结尾的长度是可变的,所以我不能使用它

有什么想法吗?

【问题讨论】:

    标签: regex


    【解决方案1】:

    使用此模式 ([0-9]*[.]){8} 可以为您提供部分匹配,因为它是未锚定的,它还可以匹配 8 个点,例如 ........,因为数字是可选的。

    此模式(([.][0-9]*){3})$ 匹配 3 个点,后跟可选数字,直到字符串的末尾。


    您可以使用捕获组,并在匹配数字之前或之后重复点以不匹配连续点..

    ^(?:\d+\.){5}(\d+(?:\.\d+)*)$
    
    • ^ 字符串开始
    • (?:\d+\.){5} 重复 5 次匹配 1+ 数字后跟一个点
    • ( 捕获第 1 组
      • \d+(?:\.\d+)* 匹配 1+ 个数字,并可选择重复匹配 . 和 1+ 个数字
    • )关闭第一组
    • $字符串结束

    Regex demo

    使用 Javascript 的示例

    const regex = /^(?:\d+\.){5}(\d+(?:\.\d+)*)$/;
    [
      "1.232.123.3.123.214.124.1241245124.123124124.124124.124124.123123123",
      "1.232.123.3.123.214.124.1241245124.123124124.124124.124124.123123123.123.1234.12",
      "1.232.123.3.123.214.124.1241245124.12345555.232",
      "1.232.123.3.123",
      "1.232.123.3.123.",
      "1.232.123.3.123.1",
      "........"
    ].forEach(s => {
      const match = s.match(regex);
      if (match) {
        console.log(match[1]);
      }
    });

    在 Java 中使用有限长度,您也可以只使用匹配,从字符串的开头向左断言 5 次重复。

    (?<=^\d{1,10}\.\d{1,10}\.\d{1,10}\.\d{1,10}\.\d{1,10}\.)\d+(?:\.\d+)*$
    

    Regex demo | Java demo

    【讨论】:

    • @AlexandruDuDu 工具或语言是什么?
    • @AlexandruDuDu 我添加了一个使用 Javascript 获取组 1 值的示例
    • @AlexandruDuDu 啊,你在 Java 中使用它。出于某种原因,我认为是 Javascript。你能控制Java代码吗?请参阅此 Java 示例以获取组 1 值 ideone.com/Xk6Wwq
    • @AlexandruDuDu 该代码也适用于正则表达式,但您必须为示例数据启用多行标志。见regexr.com/60gcq
    • "@第四只鸟" 哦,我明白了,这很有道理。非常感谢您的时间和所有的解释。
    猜你喜欢
    • 1970-01-01
    • 2022-12-11
    • 2010-11-06
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多