【问题标题】:String validation for operators like & , !, ),(, | through regex通过正则表达式对 and , !, ),(, | 等运算符进行字符串验证
【发布时间】:2015-05-18 15:06:05
【问题描述】:

我对 reg-ex 完全陌生,我想验证 string 的有效逻辑运算符组合,例如 ( ! 、 & 、 ( , ) , | ) 。例如,如果 & | 组合在一起,则它应该是无效的,因为 AND OR 应该组合在一起。同样可能的无效组合是 &|、|&、()、!&、&! 等

类似下面字符串的例子

1.  (ABC)&(DFG)|!(ZXC) - pass because all operators are correctly combined
2.  !(ABC|DKJ)&VBN - pass
3.  !(ADF&(!&(BER|CTY))|DGH) = failed as !& combined
4.  !(ABC&DKJ)&|VBN - failed as & | combined

我知道他们的几种方法,例如我可以使用 String's contains 方法来获取检查并在未通过验证时拒绝。但我正在通过reg-ex java 寻找解决方案

【问题讨论】:

标签: java regex string validation


【解决方案1】:

为了避免匹配无效的运算符组合,您可以像这样使用负前瞻正则表达式:

^(?!.*?(&\\||\\|&|\\(\\)|!&|&!))

将它与MULTILINE 选项一起用于多行输入:

Pattern p = Pattern.compile( "(?m)^(?!.*?(&[!|]|[(|]&|\\(\\)))" );

RegEx Demo

要使用字符串输入,您可以这样做:

boolean value = input.matches( "(?!.*?(&[!|]|[(|]&|\\(\\))).+" );

【讨论】:

  • 如何以一种方法使用它对不起,但请指导我,因为我对正则表达式完全陌生
  • 好的检查我编辑的答案,使用String#matches和上面的正则表达式。
  • 虽然我同意你的方法,但我认为 OP 实际上不应该遵循这一点。大括号总是会导致 corner case :)
  • @anubhava 谢谢,但一旦完成,我会尽快测试所有可能的组合我会投票给这个杰作
  • @anubhava 它给出的理想情况下通过了这个测试,它不应该在这里!(ABC|DKJ)(&VBN)(是无效的组合
猜你喜欢
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多