Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式-不允许某些字符连续出现_Java_Regex - Fatal编程技术网

Java 正则表达式-不允许某些字符连续出现

Java 正则表达式-不允许某些字符连续出现,java,regex,Java,Regex,我不确定这是否可行: 编写将中缀符号转换为后缀符号的程序。到目前为止,一切都进展顺利,但要实现验证却很困难 我尝试使用正则表达式验证中缀符号,符合以下规则: 字符串必须仅以数字或((程序不允许负数)开头 字符串只能以数字结尾或) 字符串只能包含0-9*/()-+ 字符串不能允许以下字符同时出现+*/- 我有一个符合前3条规则的正则表达式: (^[0-9(])([0-9+()*]+)([0-9)]+$) 可以使用正则表达式实现最后一条规则吗?我只回答第四条规则,因为您只对它有问题 是的,这是有可

我不确定这是否可行:

编写将中缀符号转换为后缀符号的程序。到目前为止,一切都进展顺利,但要实现验证却很困难

我尝试使用正则表达式验证中缀符号,符合以下规则:

  • 字符串必须仅以数字或
    (程序不允许负数)开头
  • 字符串只能以数字结尾或
  • 字符串只能包含
    0-9*/()-+
  • 字符串不能允许以下字符同时出现
    +*/-
  • 我有一个符合前3条规则的正则表达式:

    (^[0-9(])([0-9+()*]+)([0-9)]+$)
    

    可以使用正则表达式实现最后一条规则吗?

    我只回答第四条规则,因为您只对它有问题

    是的,这是有可能的,但我认为正则表达式不是检查

    此模式将匹配任何包含
    +
    且不包含其他字符的字符串:
    /
    *
    *
    -
    。因为一个字符已经很长很难读了

    它使用条件表达式
    (?…)
    检查
    +
    的前瞻性检查是否成功,如果成功,则负前瞻性确保没有任何
    \*-
    字符

    对于所有字符,正则表达式将变得非常大,并且很难维护


    这就是为什么我不建议将其用于此任务。

    我同意MichałTurczyn的观点,即正则表达式不是此任务的任务,但没有理由。实施您的限制很容易。但是,您的限制也允许使用诸如
    (0+3
    2(*4)
    (((1
    )和其他您可能不想要的东西之类的表达式,因此正则表达式验证是毫无意义的。如果您是使用具有某些重要功能的正则表达式引擎编写的,如PCRE(Perl、PHP)或Onigo(Ruby),您可以在regex中伪造解析器;但在Java中,regex的功能非常有限。尽管如此,它足以满足问题中的要求:

    ^[0-9(](?:(?![+*/-][+*/-])[0-9+*/()-])*[0-9)]$
    
    • 以数字或括号开头
    • 任何允许字符的任意重复次数,使得该字符和下一个字符不同时是运算符
    • 以数字或论文结尾

    你说得对。从未考虑过它仍然允许的其他表达方式。谢谢你的帮助。