用于验证 "abc-b=ac" 等减法方程式的正则表达式

Regex to validate subtract equations like "abc-b=ac"

我偶然发现了一个正则表达式问题。

如何验证这样的减法方程

一个字符串减去另一个字符串等于剩下的部分(所有项都是普通字符串,不是集合。所以abba是不同的字符串)。

通过

失败

这是我尝试过的方法,您可以尝试一下

https://regex101.com/r/lTWUCY/1/

免责声明:我看到一些评论被删除了。因此,让我首先说,尽管很短(就代码高尔夫而言),但就所涉及的步骤而言,以下答案不是最有效的。不过,从问题的性质及其“难题”方面来看,它可能会做得很好。为了获得更有效的答案,我想将您重定向到 答案。


这是我的尝试:

^(.*)(.+)(.*)-=(?=.)$

在线查看demo

  • ^ - 起始行锚点。
  • (.*) - 第一个包含 0+ 个非换行符的捕获组;
  • (.+) - 第二个捕获组包含 1 个以上的非换行符;
  • (.*) - 第 3 个捕获组具有 0+ 个非换行符,直到;
  • -= - 连字符后跟对我们的第二个捕获组的反向引用和文字“=”。
  • (?=.) - 断言位置的肯定前瞻后跟除换行符之外的至少一个字符。
  • </code> - 对第一个和第三个捕获组中捕获的内容的反向引用。</li> <li><code>$ - 结束行锚点。

编辑:

我想限制性更强的可能是:

^([a-z]*)([a-z]+)((?1))-=(?=.)$

您可以使用这个更高效的正则表达式,在开始时先行使用捕获组匹配 - 右侧的文本,即 -= 之间的子字符串并将其捕获到第 1 组中。然后在正则表达式的主体中,我们只检查捕获组 #1 的存在,并在 2 个单独的组中捕获 </code> 前后的文本。</p> <pre><code>^(?=[^-]+-([^=]+)=.)([^-]*?)([^-]*)-[^=]+=$

RegEx Demo

正则表达式演示:

  • ^: 开始
  • (?=[^-]+-([^=]+)=.):先行确保我们有 pqr-pq=r 的表达式结构,还有 更重要的是 捕获 - 和 [= 之间的子字符串13=] 在捕获组 #1 中。 = 之后的 . 是否有理由禁止 = 之后的任何空字符串。
  • ([^-]*?): 匹配捕获组 #2
  • 中的 0 个或多个非 - 字符
  • </code>:向后引用组 #1 以确保我们匹配与捕获组 #1 中相同的值</li> <li><code>([^-]*):匹配捕获组 #3
  • 中的 0 个或多个非 - 字符
  • -:匹配一个-
  • [^=]+:匹配0个或多个非=字符
  • =:匹配一个=
  • </code>: 对组#2 和#3 的反向引用,这是减法的差异</li> <li><code>$:结束