正则表达式填字游戏缺少第四个捕获组

时间:2017-06-07 14:08:26

标签: regex

BrainF*ing正则表达式填字游戏中,我正在查看第四行((([<+>])\3\3)|(<-])(?=>))+。我已经在第五栏\++\-+\.+\-+\++上工作了,我相信-最终会出现在第四栏。

到目前为止我所拥有的:<<< ->> +++(此处的空格未知)。在我看来,-不合适/不属于(除非第一个和最后一个空格是[<\-\]])。通过regex101查看{I}插入<<<-->>>]+++(仅用于测试,但没有看到--],右侧第四个捕获组也不是{是否有理由regex101看不到第四个捕获组:(<-])?我是否正确-是否有效?

1 个答案:

答案 0 :(得分:1)

(<-])部分是捕获组,它匹配原子序列,此处为<-] 3-char子字符串。

要匹配任何符号,<-],这些符号应放入字符类[<\-\]]

请注意,您的字符串不包含<-]子字符串,因此<-]不匹配。一旦你添加它,你的正则表达式就可以了。

通常没有必要在重复组中使用捕获组,因为在大多数语言中,只捕获的最后一个值保存在匹配对象中(PyPi Python正则表达式模块和.NET正则表达式引擎保留所有这些)。

所以,你可以使用

(?:([<+>])\1\1|<-](?=>))+

请参阅regex demo

<强>详情:

  • (?:([<+>])\1\1|<-](?=>))+ - 1个或多个序列:
    • ([<+>])\1\1 - <+>后跟2次完全相同的字符
  • | - 或
  • <-](?=>)一个<-]子字符串,后面有>(不消耗>,它可以在下一个匹配迭代中自由使用,因为它在一个正数内超前)。