regex - 正则表达式,仅匹配包含一次出现某些字符的字符串
问题描述
我有以下正则表达式:
^[-]?([+]?[\d]+[-+*/]?)+$
我的目标是匹配包含算术表达式和整数的字符串。它是成功的,除了一个案例。说到等号。我只希望这个表达式匹配最多包含一个等号的字符串。这意味着它将匹配
7=7
但不是
7=7=7
因为第二个字符串出现了两次等号。
我尝试使用花括号 {},我想我需要类似的东西
={0,1}
这将与恰好出现一次或未出现“=”的字符串匹配。但不幸的是,我不知道如何将它合并到我的正则表达式中。
解决方案
由于您只想匹配算术表达式和整数,因此我更改了代码以查找具有数字、运算符或等号的所有内容:^[-+*\/\d=]+$
。我需要转义角色/
->\/
为了只匹配一个等号,我添加了一个负前瞻:(?!.*=.*=)
. 如果它找到括号内的内容,则整个正则表达式将不匹配。例如,如果您有一个单词 mytext : (?!mytext)
整个正则表达式将不匹配。.*
意味着它找到了一切(.
代表每个字符,并且*
说它可以存在 0 到无限次)。
所以这是解决方案:
^(?!.*=.*=)[-+*\/\d=]+$
在此处查看实时示例: https ://regex101.com/r/zhSEmf/1/
此外,您的代码不适用于 -4*-4。
编辑:由于您不希望代码以 / 或 * 开头,因此我在否定前瞻中添加了 id :^(?!.*=.*=|[\/*].*)[-+*\/\d=]+$
推荐阅读
- python - Pymongo将命令光标转换为5000个批量列表
- excel - VBA - 嵌套的 For 循环不起作用
- laravel - Laravel 5,自引用在刀片中不起作用
- service-worker - 在下面的代码中为服务工作者获取侦听器的目的是什么
- simulation - 用热量需求计算质量流量的缓慢计算
- typescript - 如何在 Aurelia 中使用授权自定义属性禁用自定义组件
- angular - angular5的地图框
- c# - 允许用户将多个项目添加到 ObservableCollection c#
- java - 如何使用单个用于具有相同 dtasnapshot 对象的每个循环获取 2 个节点的组合数据
- kentico - Kentico 11 - 托管环境中的电子邮件营销 CMS 显示问题