假设您有这样的字符串:
198<string>12<string>88<string>201
是的,看起来像是IPv4地址,因为它是一个。
如何查看字符串中是否有重复的模式? 我不知道从哪里开始,我不确定正则表达式会有所帮助,因为我真的不知道要查找什么字符串,只是它会被重复。
此处的目标是从主字符串中删除<string>
。
好吧,我们可以说字符串是:
String test = "112(dot)115(dot)48(dot)582";
if(isIP(test){
System.out.println("Yep, it's an ip");
}
输出应为:
Yep, it's an ip
分隔符(点)将始终不同。
答案 0 :(得分:1)
试试这个:https://regex101.com/r/oR1gS8/4
/^((?:\d{1,3}[^0-9]+){3}\d{1,3})$/
匹配198<string>12<string>88<string>201
,112(dot)115(dot)48(dot)582
和112<test>115<test>48<test>582
等等......
答案 1 :(得分:1)
/((((\d{1,3})\D{1,5}){3})(\d{1,3}))$/
112(点)115(点)48(点)582
匹配
1. [0-26] `112(dot)115(dot)48(dot)582`
2. [0-23] `112(dot)115(dot)48(dot)`
3. [16-23] `48(dot)`
4. [16-18] `48`
5. [23-26] `582`
在here
中逐一控制您的案例答案 2 :(得分:0)
您需要捕获组才能完成此操作并使用非数字D
。
public boolean isIP(String test) {
String regex = "\\d+(\\D+)\\d+\\1\\d+\\1\\d+";
return test.matches(regex);
}
我在这里使用了正则表达式:\d+(\D+)\d+\1\d+\1\d+
它相当于: -
\d+ (\D+) \d+ \1 \d+ \1 \d+
numbers_1 non-numbers_1 numbers_2 non-numbers_1 numbers_3 non-numbers_1 numbers_4
或者您可以将上述正则表达式进一步缩减为\d+(\D+)\d+(\1\d+){2}
答案 3 :(得分:0)
这应该有帮助
import java.util.regex.Pattern;
public class App
{
private static String IPV4_REGEX ="^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$";
private static final Pattern IP4_PATTERN = Pattern.compile(IPV4_REGEX);
public static void main( String[] args ) {
String test1 = "198<string>12<string>88<string>201";
String test2 = "198(foo)12(foo)88(foo)201";
if(isIP(test1)) {
System.out.println("Yep, it's an ip");
}
if(isIP(test2)) {
System.out.println("Yep, it's an ip");
}
}
public static boolean isIP(String input) {
String[] chunks = input.replaceAll("[^\\d.]", "x").split("x+");
if (chunks.length != 4) {
System.out.println("not valid ");
return false;
}
String ip = chunks[0] + "." + chunks[1] + "." + chunks[2] + "." + chunks[3];
return IP4_PATTERN.matcher(ip).matches();
}
}