regex - 匹配最多两个运算符的正则表达式

标签 regex swift

我正在用 Swift 构建一个需要检查这些特定情况的正则表达式:

如果找到则匹配:

AB*5+4
AB+4*5
AB+4
AB*5
AB
AB+54.45
AB+50.49*54

如果找到则不匹配:

AB+4+5
AB*4*5
AB*0

只能有零到两个运算符(+*),但如果有两个,则不能相同。与 0 的乘积不应匹配。

我构建的正则表达式如下:

[A-Z]{2}(\+|\*)[1-9]{1,}(?:(?(?=\1)(\+|\\*))[1-9]{1,})?

主要问题是我无法预测第一个捕获组中的条件,所以我无法检查如下内容:if * in the first captured group then + 反之亦然。

谁能帮帮我?

最佳答案

您需要使用否定前瞻 ((?!...)),如下所示:

[A-Z]{2}(\+|\*)\d+(?!\1)((\+|\*)\d+)?

the docs 中所述, 一个否定的先行断言是

True if the parenthesized pattern does not match at the current input position. Does not advance the input position.

上面的正则表达式匹配:

  • [A-Z]{2} 2 个字母
  • (\+|\*) +*
  • \d+ 1个或多个数字
  • (?!\1)后面不能跟第一个相同的符号(+*)
  • ((\+|\*)\d+)? 可选地,另一个 +* 后跟一个或多个数字<

Here's a demo它通过了您作为示例列出的所有案例,并符合您在评论中的限制。

关于regex - 匹配最多两个运算符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41253769/

相关文章:

php - 使用正则表达式匹配多个变量(PHP/JS)

regex - 谷歌表格正则提取每个单词的第一个字母

ios - Storyboard中的自定义 alertViewController

arrays - Swift 数组(重复 :, 计数 :) 行为

swift - 按顺序 Swift 执行任务

python - python中根据非连续整数、字符和 float 分割字符串

正则表达式(re2 googlesheets)多行单元格中的多个值

java - 在 Netbeans 中查找非法字符\0

ios - 在 Swift(iOS)和 setValue forKey 中子类化 NSObject 的子类

ios - UITextField 的 bindTo rx_text 没有触发 UITextField 的发射事件