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

时间:2014-12-07 21:46:01

标签: java regex 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

分隔符(点)将始终不同。

4 个答案:

答案 0 :(得分:1)

试试这个:https://regex101.com/r/oR1gS8/4

/^((?:\d{1,3}[^0-9]+){3}\d{1,3})$/

匹配198<string>12<string>88<string>201112(dot)115(dot)48(dot)582112<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();
    }
}