在BrainF*ing正则表达式填字游戏中,我正在查看第四行((([<+>])\3\3)|(<-])(?=>))+
。我已经在第五栏\++\-+\.+\-+\++
上工作了,我相信-
最终会出现在第四栏。
到目前为止我所拥有的:<<< ->> +++
(此处的空格未知)。在我看来,-
不合适/不属于(除非第一个和最后一个空格是[<\-\]]
)。通过regex101查看{I}插入<<<-->>>]+++
(仅用于测试,但没有看到--
或]
,右侧第四个捕获组也不是{是否有理由regex101看不到第四个捕获组:(<-])
?我是否正确-
是否有效?
答案 0 :(得分:1)
(<-])
部分是捕获组,它匹配原子序列,此处为<-]
3-char子字符串。
要匹配任何符号,<
或-
或]
,这些符号应放入字符类[<\-\]]
。
请注意,您的字符串不包含<-]
子字符串,因此<-]
不匹配。一旦你添加它,你的正则表达式就可以了。
通常没有必要在重复组中使用捕获组,因为在大多数语言中,只捕获的最后一个值保存在匹配对象中(PyPi Python正则表达式模块和.NET正则表达式引擎保留所有这些)。
所以,你可以使用
(?:([<+>])\1\1|<-](?=>))+
请参阅regex demo
<强>详情:
(?:([<+>])\1\1|<-](?=>))+
- 1个或多个序列:
([<+>])\1\1
- <
,+
或>
后跟2次完全相同的字符|
- 或<-](?=>)
一个<-]
子字符串,后面有>
(不消耗>
,它可以在下一个匹配迭代中自由使用,因为它在一个正数内超前)。