java - 需要正则表达式来验证自定义输入

标签 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 类:普通乘客、航空乘客或忠诚乘客
  • 对于一般乘客,将添加乘客一般马克
  • 对于航空公司乘客,将添加客运航空公司 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/

相关文章:

java - 如何将@CheckForNull 等与Findbugs 一起使用?

java - 使用正则表达式从字符串中删除特定 XML 标记的所有实例

java - 强制 JScrollPane 中的 JEditorPane 收缩 + 重新换行

java - 学习如何使用构建工具而不是 IDE。对调试如何适应感到困惑

java - 字符串到带有空字符串的集合

javascript - 可以让正则表达式只匹配某些字符/[&< >"' ]/g

python - 从大型 unicode 文本文件中删除符号

c++ - 打印句子短语的错误c++

javascript - 使用正则表达式搜索 div 类

java - 当客户端和服务器在同一台计算机上时,Kerberos 身份验证未运行