正则表达式匹配其他任何东西,但

时间:2021-06-22 13:42:18

标签: regex



所以我有这些价值观:
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})$



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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

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


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

^(?:\d+\.){5}(\d+(?:\.\d+)*)$
  • ^ 字符串开头
  • (?:\d+\.){5} 重复 5 次匹配 1+ 个数字后跟一个点
  • ( 捕获组 1
    • \d+(?:\.\d+)* 匹配 1+ 位数字并可选择重复匹配 . 和 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