所以我有这些价值观:
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})$
但由于末端的长度可以是可变的,我不能使用它
有什么想法吗?
答案 0 :(得分:2)
使用此模式 ([0-9]*[.]){8}
可以为您提供部分匹配,因为它是未锚定的,它还可以匹配 8 个点,例如 ........
,因为数字是可选的。
此模式 (([.][0-9]*){3})$
匹配 3 个点,后跟可选数字,直到字符串末尾。
您可以使用捕获组,并在匹配数字之前或之后重复点以不匹配连续点..
^(?:\d+\.){5}(\d+(?:\.\d+)*)$
^
字符串开头(?:\d+\.){5}
重复 5 次匹配 1+ 个数字后跟一个点(
捕获组 1
\d+(?:\.\d+)*
匹配 1+ 位数字并可选择重复匹配 .
和 1+ 位数字)
关闭第 1 组$
字符串结束使用 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+)*$