多次出现特定单词的正则表达式

时间:2018-05-29 16:47:01

标签: java regex validation salesforce apex

您好

我试图创建一个验证规则,检查正则表达式只接受特定的短语。 Regex基于Java。

以下是正确输入的示例:   

  • 1OR2
  •    
  • 2
  •    
  • 1 OR 2 OR 15
  •     
  • ( 2OR3) AND 1
  •     
  • (12AND13 AND1)OR(4 AND5)
  •    
  • ((2AND3 AND 1)OR(4AND5))AND6
  • 但如果只有正则表达式可以接受这样的话,我会很高兴:

    ())34AND(4

    我不知道如何创建一个正则表达式来检查括号是否正确打开和关闭(它们可以嵌套)。我认为在正则表达式中检查它是不可能的,因此我已经在代码(堆栈实现)中对括号进行了正确的验证。在代码中,我对短语进行了第二步验证。

    我需要正则表达式来检查短语中是否有这些特定的东西:

    允许使用多个出现次数和空格的数字,圆括号,单词AND和OR。 它不应该接受字母或其他字符。 到目前为止,我设法创造的是:

    ^[0-9 \\(][0-9 \\(\\)]*

    还尝试添加类似的内容:

    \\b(AND|OR)\\b

    在第二对括号内,但没有运气。

    我无法弄清楚如何纠正它以添加OR和AND字。

    2 个答案:

    答案 0 :(得分:1)

    我使用了以下内容并匹配了您提供的所有输入:

    ^[^\)][0-9 \( (AND|OR)]*$
    

    我以为你不想开始),这就是我加入^ [^ \]]的原因。

    如果您不知道,我使用https://www.regexpal.com检查我的正则表达式代码。

    答案 1 :(得分:0)

    由于您拥有任意数量的嵌套元素,因此使用正则表达式是不可能的。

    仅出于演示目的,它匹配零个或多个连词和一组括号:

    ^\d+(\s*(?:AND|OR)\s*(\d+|\(?\s*\d+(\s*(?:AND|OR)\s*\d+)\s*\)))*$|^(\d+|\(?\s*\d+(\s*(?:AND|OR)\s*\d+)\s*\))\s*(\s*(?:AND|OR)\s*\d+)*$
    

    那就是它。添加更多集合和嵌套括号的级别会导致指数级增加的复杂性 - 直到它完全中断。

    Demo