![](/img/trans.png)
[英]Regex to match only certain characters or strings and only one instance of each?
[英]Regex, only match with strings that contain one occurence of certain characters
我有以下正则表达式:
^[-]?([+]?[\d]+[-+*/]?)+$
我的目标是匹配包含算术表达式和整数的字符串。 它是成功的,除了一个案例。 说到等号。 我只希望这个表达式匹配最多包含一个等号的字符串。 这意味着它将匹配
7=7
但不是
7=7=7
因为第二个字符串出现了两次等号。
我尝试使用花括号 {},我想我需要类似的东西
={0,1}
这将与恰好出现一次或未出现“=”的字符串匹配。 但不幸的是,我不知道如何将它合并到我的正则表达式中。
由于您只想匹配算术表达式和整数,因此我更改了代码以查找具有数字、运算符或等号的所有内容: ^[-+*\/\d=]+$
。 我需要转义字符/
-> \/
为了只匹配一个等号,我添加了一个负前瞻: (?..*=.*=)
。 如果它找到括号内的内容,则整个正则表达式将不匹配。 例如,如果您有一个单词 mytext: (?!mytext)
整个正则表达式将不匹配。 .*
表示它可以找到所有内容( .
代表每个字符, *
表示它可以存在 0 次到无限次)。
所以这是解决方案:
^(?!.*=.*=)[-+*\/\d=]+$
在此处查看实时示例: https://regex101.com/r/zhSEmf/1/
此外,您的代码不适用于 -4*-4。
编辑:由于您不希望代码以 / 或 * 开头,因此我在否定前瞻中添加了 id : ^(?..*=.*=|[\/*].*)[-+*\/\d=]+$
如果你想匹配只有一个等号的字符串,那么你不想匹配没有等号的字符串,也不想匹配多个等号的字符串。 像这样的正则表达式:
^(?!.*=.*=)(?![^=]*$)[-+*\/\d=]+$
不幸的是,这将匹配像9=
这样的字符串。 可能是不希望的。
我怀疑你想同时匹配 a=b 形式的字符串和 a 形式的字符串,其中 a 和 b 是数字。 然后这将起作用:
^[-+*\/\d]+(=[-+*\/\d]+){0,1}$
不幸的是,这将匹配*9=+8
之类的字符串,但修复此问题会使正则表达式更加复杂,因此不太适合作为示例。 例如,对于没有等号的表达式: Regular Expression for Simple Arithmetic String
在此处查看实时示例: https://regex101.com/r/AZymgc/1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.