我需要以以下格式更新CIDR范围(IP)的第三个八进制。
10.150.0.0/27
我只想匹配第三个八位位组,以便可以替换它。在这种情况下,它将是左边的第一个0。
答案 0 :(得分:1)
以下正则表达式模式从0到9最多匹配3个数字,表示4个八位字节,并在末尾包含掩码。您所追求的是第三个八分位数附近的括号(捕获组)。
[0-9]{1,3}\.[0-9]{1,3}\.([0-9]{1,3})\.[0-9]{1,3}/[0-9]{1,2}
或更速记
\d{1,3}\.\d{1,3}\.(\d{1,3})\.\d{1,3}/\d{1,2}
在Java中,您将需要执行以下操作:
Pattern pattern = new Pattern.compile("[0-9]{1,3}\.[0-9]{1,3}\.([0-9]{1,3})\.[0-9]{1,3}/[0-9]{1,2}";
Matcher matcher = pattern.match("yourIPAddressHere")
while (matcher.find()) {
String thirdOctet = matcher.group(0); <--- the number of the matching group
}
从那里,您可以使用String.replace或任何您想修改原始IP的方式。希望这会有所帮助!
答案 1 :(得分:0)
\d{1,3}\.\d{1,3}\.(\d{1,3})\.\d{1,3}\/\d+
将捕获该序列的第三部分。您可以使用regex.replace
将其替换为其他内容。
如果您只想要该特定IP,那么它会更容易。
10\.150\.(\d+)\.0\/27
答案 2 :(得分:0)
这是您的Regex。请注意,它不会验证八位位组是否在范围内。
\d{1,3}\.\d{1,3}\.(\d{1,3})\.\d{1,3}\/\d+
这是使用捕获组()
替换它的方法。
String ip = "10.150.0.0/27";
String pattern = "(\\d+\\.\\d+\\.)(\\d+)(\\.\\d+\\/\\d+)";
String newIp = ip.replaceAll(pattern,"$1" + "123" + "$3");
System.out.println(newIp); // prints 10.150.123.0/27
它如何工作?通过捕获组,我可以使用$
字符和从1
索引到特定组的数字临时存储和引用这些组。我想保留第一个和第三个,并用123
替换第二个,得到"$1" + "123" + "$3"
。
为了简洁起见,我特意使用了上面的逐项版本。缩短的字符串类似于"$1123$3"
。
答案 3 :(得分:0)