我有一个输入需要验证,我正在寻找一种使用正则表达式来完成此操作的方法。
输入语法
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 类:普通乘客、航空乘客或忠诚乘客
- 对于一般乘客,将添加乘客一般马克
- 对于航空公司乘客,将添加客运航空公司 Trevor
- 对于忠诚度乘客,添加乘客忠诚度 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());
最佳答案
这是一个正则表达式,它将验证整个输入字符串,或者,
如果外层集群组被取消,您可以获得单独的添加乘客
类型。类型根据捕获组 1、2 或 3 是否匹配以及
来指示
是名称。
"(?i)^(?:\\s*add\\s+passenger\\s+(?:general\\s+(\\w+)|航空公司\\s+(\\w+) |忠诚度\\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
关于java - 需要正则表达式来验证自定义输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51026167/