我有一个需要验证的输入,并且我正在寻找一种使用正则表达式进行输入的方法。
输入语法
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
几分
我尝试了以下逻辑,但是它无法验证句子的多次出现。就像它可以验证首次出现的一般旅客,但不会验证任何随后的再次出现的一般旅客。与其他类型的乘客相似
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());
答案 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()等对其进行分解。这使您可以以更易于维护的方式控制逻辑。