有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java冒号分隔值正则表达式验证

诚然,我不是正则表达式专家,但我想验证输入字符串,为各种验证编写if/else语句并不是实现这一点的方法。我在用Java

输入将以冒号(:)分隔的三个值的元组的形式出现。第一个值将是一个整数(就大小/长度而言可能是一个长值),另外两个值可以是数字或字符串

例如,以下值将是有效的:

  • 1:x:456
  • 2:2:3
  • 3:abc:123

。。而这些不会:

  • x:1:2
  • 1:2
  • 1:3:x
  • 1:2
  • fyz::2:1
  • 1:3:3

是否有一种相对简单的方法可以使用正则表达式验证此输入


共 (1) 个答案

  1. # 1 楼答案

    匹配Numbers:(letters OR numbers):(letters OR numbers)

    如果您希望第二部分和第三部分只能是数字或字母,可以使用以下模式:

    String pattern = "^\\d+(:([A-Za-z]+|\\d+)){2}$";
    

    基本上,它会寻找一个数字序列(\\d+),然后是一个重复两次的字符序列:

    • 以a :开头,后跟
      • 字母序列(英文),即^{,或
      • 一系列数字

    ^$字符是锚,意思是“字符串的开始”和“字符串的结束”

    例如:

    public class RegexTest {
        public static void Main(String[] args) {
            String pattern = "^\\d+(:([A-Za-z]+|\\d+)){2}$";
            String example = "333:abc:123456";
            if (example.matches(pattern)) {
               System.out.println("Matches");
            }   
        }
    }
    

    匹配Numbers:(both letters and numbers:(both letters and numbers)

    为此,您可以使用以下模式:

    String pattern = "^\\d+(:[A-Za-z0-9]+){2}$";
    

    哪一个匹配:

    • 一系列数字,后跟
    • 冒号,后跟字母或数字的任意组合
      • 重复这个序列两次

       public class RegexTest {
            public static void Main(String[] args) {
                String pattern = "^\\d+(:[A-Za-z0-9]+){2}$";
                String example = "333:a3b4c:12adf3456";
                if (example.matches(pattern)) {
                   System.out.println("Matches");
                }   
            }
        }
    

    这个例子将匹配