繁体   English   中英

如何识别字符串中重复字符的模式?

[英]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)582112<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM