需要使用正则表达式来验证自定义输入

时间:2018-06-25 14:43:31

标签: java regex

我有一个需要验证的输入,并且我正在寻找一种使用正则表达式进行输入的方法。

输入语法

add passenger general {passenger-name} add passenger airline 
{passenger-name} add passenger loyalty {passenger-name} {current- 
loyalty-points} {using-loyalty-points} {has-extra-bag}

输入

add passenger airline Trevor add passenger general Mark add passenger 
loyalty Joan 100 FALSE TRUE add passenger general Daniel

几分

  • 输入中可以有任意数量的添加乘客语句
  • 旅客有3种类型,一般,航空公司或忠诚度
  • 对于一般乘客,将添加一般乘客马克
  • 对于航空公司乘客,将添加特雷弗航空公司
  • 对于忠诚乘客,将增加乘客忠诚度Joan 100 假真

我尝试了以下逻辑,但是它无法验证句子的多次出现。就像它可以验证首次出现的一般旅客,但不会验证任何随后的再次出现的一般旅客。与其他类型的乘客相似

String s = "add passenger general Mohit add passenger general ra add 
passenger airline rajui";

Pattern pattern = Pattern.compile("((add passenger general) \\D+)* 
((add passenger airline) \\D+)*");

Matcher matcher = pattern.matcher(s);
System.out.println(matcher.matches());

2 个答案:

答案 0 :(得分:1)

这里是一个正则表达式,它将验证整个输入字符串,或者,
如果外部集群组被取消,您可能会得到单个 add passanger
类型。根据捕获组1、2或3是否匹配且
来指示类型 是名称

"(?i)^(?:\\s*add\\s+passenger\\s+(?:general\\s+(\\w+)|airline\\s+(\\w+)|loyalty\\s+(\\w+)\\s+(\\d+)\\s+(TRUE|FALSE)\\s+(TRUE|FALSE)))+\\s*$"

可读版本

 (?i)
 ^    
 (?:
      \s* add \s+ passenger \s+ 
      (?:
           general \s+ 
           ( \w+ )                       # (1)

        |  airline \s+ 
           ( \w+ )                       # (2)

        |  loyalty \s+ 
           ( \w+ )                       # (3)
           \s+ 
           ( \d+ )                       # (4)
           \s+ 
           ( TRUE | FALSE )              # (5)
           \s+ 
           ( TRUE | FALSE )              # (6)
      )
 )+
 \s* 
 $

输出

 **  Grp 0 -  ( pos 0 : len 128 ) 
add passenger airline Trevor add passenger general Mark add passenger 
loyalty Joan 100 FALSE TRUE add passenger general Daniel  

答案 1 :(得分:0)

这不是您问题的答案;相反,这是一些建议。是的,可以创建一个或多个正则表达式来解析您的输入。但是,考虑到所有要求,最终将变得相当复杂。一旦编写完成,对输入的任何更改都将需要修改这些正则表达式。

首先,我建议,如有可能,请更改您的输入。像JSON这样的东西将更易于创建和解析。

第二,有时更容易从String的开头开始并使用String.indexOf()、. substring()等对其进行分解。这使您可以以更易于维护的方式控制逻辑。