java - 正则表达式 - 禁止某些字符连续出现

标签 java regex

我不确定这是否可能:

编写一个程序将中缀表示法转换为后缀表示法。到目前为止一切进展顺利,但尝试实现验证却很困难。

我正在尝试使用正则表达式来验证中缀表示法,并遵守以下规则:

  1. 字符串只能以数字或((程序不允许负数)开头
  2. 字符串只能以数字或 结尾
  3. 字符串只能包含 0-9*/()-+
  4. 字符串不得允许以下字符一起出现+*/-

我有一个符合前 3 条规则的正则表达式:

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

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

最佳答案

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

是的,有这种可能性,但我认为正则表达式不是检查这一点的合适工具......

此模式 ^(?(?=.*\+)(?!.*[\*\/-])).+$ 将匹配任何包含 + 的字符串 并且不包含其他字符:/*-。一个字就已经很长,很难读了。 See demo .

它使用条件表达式(?...)来检查+的前瞻检查是否成功,如果成功,则负前瞻确保您不会包含任何 \*- 字符。

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

这就是为什么我不推荐它来完成这项任务。

关于java - 正则表达式 - 禁止某些字符连续出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52442699/

相关文章:

java - 在 JAVA 中使用字符串作为多维数组的索引

java - Camel 读取文件内容

regex - 一个关于查找数字字符串的Java正则表达式

mysql - 使用 SQL 查询在单词列表中查找精确的单词匹配

java - 删除和移动数组中的对象

java - 组织.testng.TestNGException : while trying to execute the tests

java - JDBC:socketTimeout 和 networkTimeout 的区别

java - 通过正则表达式删除所有非打印字符

javascript - 两个字符之间的子字符串

PHP 反向 Preg_match