结肠分离值正则表达式验证

时间:2012-04-26 00:14:44

标签: java regex

我承认我不是正则表达式专家,但是想要验证输入字符串并编写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

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

5 个答案:

答案 0 :(得分:1)

对于可以混合第2和第3值的情况:

/^[0-9]+:[0-9a-zA-Z]+:[0-9a-zA-Z]+$/

对于只能是字符串或只是数字的情况:

/^[0-9]+:([0-9]+)|([a-zA-Z]+):([0-9]+)|([a-zA-Z]+)$/

答案 1 :(得分:1)

我建议如下:

 ^[0-9]+:[^:]+:[^:]+

行首,后跟数字,后跟冒号后跟任意数量的非冒号字符,后跟冒号后跟非冒号字符。

这应该是以数字开头的最灵活的以冒号分隔的格式。

答案 2 :(得分:1)

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

如果你想要它只是第2和第3部分的数字或字母,你可以使用这种模式:

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

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

  • 以a :开头,然后是。{
    • 一系列字母(英文),即[A-Za-z],或
    • 一系列数字

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

示例:

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");
            }   
        }
    }

此示例将匹配。

答案 3 :(得分:0)

    /\d+:\[a-zA-Z0-9]+:\[a-zA-Z0-9]+/

如果您知道可以做的最大长度

    /\d{1,X}:[a-zA-Z0-9]{1,Y}:[a-zA-Z0-9]{1,Z}/

答案 4 :(得分:0)

如果您的字符串可能在引用的字符串中包含冒号,请执行以下操作:

1234:"Ratio is 1:20":"Fuel:Oil"

然后你需要解决字符串中的冒号。在Barton Chittenden的回答基础上,您可以使用:

^(\d+):(".+?"|[^"][^:]*):(".+?"|[^"][^:]*)$

See it on regexr。对于像123:":"这样的愚蠢的事情,它会分解,但你也可以修改正则表达式来处理这些边缘情况。