我目前正在使用Java构建Web应用程序,我是regex的新手。我有以下要求验证公式:
公式可以包含以下字符集:
条件:
我有以下表达式,如下所示:
^(?!.*[*+/-]\D)(?!.*T\W)(?!.*[;:][^T])(?!.*M[^*+/-])[T][A-Z0-9 +/*;:-]*$
以下表达式符合上述有效的正则表达式:
TA123; T1 * 2 / 32M +
但我不知道如何将以下验证添加到上面的正则表达式中:
上面的正则表达式对上述条件有效,部分只有下面的那个应该是无效的,但它是有效的,这是错误的:
下面的那个不应该作为运算符(*,/,+, - )必须始终跟一个数字,但在这种情况下它是有效的:
T4R*
下面的一个不应该工作,因为字符“T”必须始终跟一个数字或一个alpha,但在这种情况下它是有效的:
T4RT
下面的那个不应该作为分隔符(;)必须始终后跟“T”,但在这种情况下它是有效的:
T4;
下面的那个不应该工作,因为字符“M”必须始终跟随运算符,但在这种情况下它是有效的:
T4RTM
你好@vks,
将更改应用于reg表达式后,请在下面找到结果:
下面的那个不应该作为运算符(*,/,+, - )必须始终跟一个数字
它适用于字符,但不适用于数字,预期的数字是数字:
T4R * H无效
有效的T4R * 5
字符“T”必须始终后跟数字或字母:
T4RT按预期无效 T4RT5应该有效,但实际结果无效 T4R应该有效,但实际结果无效
分隔符(;)必须始终后跟“T”:
T4; T应该有效但实际结果无效 T4;按预期无效
字符“M”必须始终跟随操作员:
T4RTM +应该有效,但实际结果无效 T4RTM按预期无效
知道如何对正则表达式进行哪些更改以满足上述条件?
提前感谢您提供任何帮助
答案 0 :(得分:0)
正则表达式是正确的。唯一可能失败的方法是输入后有newline
。要解决这个问题,你可以使用
^(?!.*[TM*+/;:-]$)(?!.*[*+/-]\D)(?!.*T\W)(?!.*[;:][^T])(?!.*M[^*+/-])[T][A-Z0-9 +/*;:-]*$
参见演示。
答案 1 :(得分:-1)
将任务分解成更小的部分,然后逐一解决 。
解决方案可能如下所示:
/^[0-9A-Z\*\/\+\-\;]*$/
https://regex101.com/r/sS2dM8/46 /^T.*$/
(公式必须以“T”开头)https://regex101.com/r/sS2dM8/45 /^.*T(?![0-9A-Z]).*$/
是否匹配(如果T
后面没有数字或字母匹配则会匹配)https://regex101.com/r/sS2dM8/47 /^.*;(?!T).*$/
是否匹配(如果分隔符后面没有T
,则会匹配)https://regex101.com/r/sS2dM8/48 /^.*M(?![\*\/\+\-]).*$/
是否匹配(如果M
未跟随运营商,则会匹配)https://regex101.com/r/sS2dM8/49 /^.*[\*\/\+\-](?!\d).*$/
是否匹配(如果操作员后面没有数字,则会匹配)https://regex101.com/r/sS2dM8/50 缺点:
上升空间: