[英]How to identify patterns of repeated characters within string?
假设您有一个像这样的字符串:
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
分隔符(点)将始终不同。
试试这个: 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
等...
/((((\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`
在这里一一掌握你的情况
您将需要捕获组来完成此操作,并使用非数字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}
这应该有帮助
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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.