用正则表达式解析正则表达式

时间:2020-09-29 15:12:28

标签: java regex

我有模式[a-z0-9]{9}|[a-z0-9]{11}

在这里,我必须解析该正则表达式以获取9和11,以便将来收到消息“ U必须输入9或11个符号”

我也有正则表达式

[a-z0-9]{9}

[a-z0-9]{9,}

[a-z0-9]{9,11}

我需要编写一些方法,该方法可以解析所有字符串以获取可用符号数。

我做到了

Pattern.compile(".*\\{(\\d+)(,?)(\\d*)\\}(\\|.*\\{(\\d+)\\})?");

在我的第一个模式中仅找到最后一个数字。但是其他人不认识。

如何检查所有字符串?

已更新: 我听不懂,但是在Java第一种模式中答案 \{(\d+)(?:,(\d*))?\} 不匹配,但找到3个我的字符串。但是找不到第一个和最长的字符串。

匹配和查找之间有什么区别? 以及为什么该模式可以在Web中找到匹配项,而在Java中找不到呢? 有时候我会 matcher.find(); // return 2 matcher.group(1); // No match found exception

1 个答案:

答案 0 :(得分:1)

此正则表达式should work为您:[^\\](?:\\\\)*\{(\d+)(?:,(\d*))?\}

[^\\](?:\\\\)*部分解决了斜杠转义的情况。

以下是Java代码示例:

public static void main(String[] args) {
    Pattern p = Pattern.compile("[^\\\\](?:\\\\\\\\)*\\{(\\d+)(?:,(\\d*))?\\}");
    String testInput = "[a-z0-9]{1,2}|[a-z0-9]{3,}|[a-z0-9]{4}";
    Matcher matcher = p.matcher(testInput);
    while (matcher.find()){
        System.out.println("Next matching found:");
        if(matcher.group(2) == null){
            System.out.println("Strict: " + matcher.group(1));
        }else {
            System.out.println("Min: "
                    + matcher.group(1)
                    + ", Max: "
                    + ("".equals(matcher.group(2)) ? "Infinte" : matcher.group(2)));
        }
    }
}

输出:

Next matching found:
Min: 1, Max: 2
Next matching found:
Min: 3, Max: Infinte
Next matching found:
Strict: 4