java - 字母数字范围检查器 - B3 是否在 B1 中 :B10

标签 java regex alphanumeric

如何在 java 中编写字母数字范围检查器,它将检查给定的字母数字值是否在范围内。

例如: 输入:B3,范围:B1:B10 - true
B1、B1:B10 - 正确
B10、B1:B10 - 正确
B1、B3:B10 - 假

对于超过 1 位的数字,我的尝试失败了,例如 B3:B10,第二个前缀应该是“B”,num 应该是 10,但我得到了 B1 和 0。正则表达式有什么问题吗?

public class Main {

public static final String RANGE_PATTERN = "(.+)(\\d)+:(.+)(\\d)+";
public static final String INPUT_PATTERN = "(.+)(\\d)+";
public static final Pattern P1 = Pattern.compile(RANGE_PATTERN);
public static final Pattern P2 = Pattern.compile(INPUT_PATTERN);

public static void main(String[] args) {
    System.out.println(checkWithInRange("B3:B10", "B7"));
}

public static boolean checkWithInRange(String range, String input) {
    Matcher m1 = P1.matcher(range);
    Matcher m2 = P2.matcher(input);
    if (m1.find() && m2.find()) {
        String prefix1 = m1.group(1);
        String num1 = m1.group(2);
        String prefix2 = m1.group(3);
        String num2 = m1.group(4);

        String inputPrefix = m2.group(1);
        String inputNum = m2.group(2);

        if (prefix1.equalsIgnoreCase(prefix2) && prefix2.equalsIgnoreCase(inputPrefix)) {
            int n1 = Integer.parseInt(num1);
            int n2 = Integer.parseInt(num2);
            int n3 = Integer.parseInt(inputNum);
            if (n3 >= n1 && n3 <= n2) {
                return true;
            }
        }
    }
    return false;
}
}

最佳答案

使用 "(.+?)... 接收最短序列(不含数字)。或者更好的是 "(\\D+)...

使用 (\\d+) 而不是 (\\d)+,以便 m.group(i) 是整个字符串位数。

无需对组使用空检查,也许您想要一个可选前缀:(\\D*)

您想要 find() 还是应该匹配整个字符串:matches()

关于java - 字母数字范围检查器 - B3 是否在 B1 中 :B10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20658173/

相关文章:

java - 我是 android Java 的初学者。任何人都可以解释代码

java - 触摸屏L&F

python - 在python中使用正则表达式捕获表情

javascript - 匹配不定长字符串的正则表达式

regex - Bash 需要测试字母数字字符串

java - 用户未授权应用程序执行此操作

java - 如何在 spring mvc 中使用 freemarker 消息?

javascript - 正则表达式排除以哈希标签开头的单词

javascript - 数字范围的正则表达式,以及 -1

java - 'null' 应该被视为数字吗? ...字母数字?