Ruby 正则表达式根据之前匹配的内容进行匹配

Ruby 正则表达式根据之前匹配的内容进行匹配,ruby,regex,chess,Ruby,Regex,Chess,我正在尝试编写一个正则表达式来验证移动。以下是我目前掌握的情况: / O-O(-O)? # Castling |[KQRBN]x?[a-h][1-8]\+? # Most normal moves and captures / 我迷路的地方是典当促销 骑士、主教或中间卒只能在其开始的档案上或通过捕获在任何一方的档案上提升。一辆车的棋子可以通过直线移动或捕捉到一边来提升,这取决于它是在A档还是h档上。大概是 /[a-h](x[a-h])?[18]

我正在尝试编写一个正则表达式来验证移动。以下是我目前掌握的情况:

/
    O-O(-O)?                 # Castling
    |[KQRBN]x?[a-h][1-8]\+?  # Most normal moves and captures
/
我迷路的地方是典当促销

骑士、主教或中间卒只能在其开始的档案上或通过捕获在任何一方的档案上提升。一辆车的棋子可以通过直线移动或捕捉到一边来提升,这取决于它是在A档还是h档上。大概是

/[a-h](x[a-h])?[18]=[QRBN]\+?/
不起作用,因为fxh8不是有效移动(只有fxe8和fxg8是有效移动)。我可以和你一起走很长的路

/(a(xb)?|h(xg)?|b(x[ac])?.../ # insert 5 more files in place of the ...
但这不是很有效。我想使用分组,这样我就可以做车兵,以及其他一切。我有这样的想法:

/([b-g])(x(\1±1))?/

表示“字母b到g后面可能跟在它们前面或后面的字母”。

匹配相邻字母并不难使用交替,但您不会发现任何紧凑的内容,因为正则表达式中没有字符算术

有人只是出于对你困境的同情才发了一封信


漫长的路是唯一的出路。

哪种正则表达式实现?在一般情况下,没有办法将逻辑-match
f(capture)
-包含在Ruby编程语言中。这是一个很好的问题,但是您假设了很多关于您的问题的知识,而我们中的许多人都没有。如果你展示了一张图表,上面有你想要表达的单元格编号和移动,这会有所帮助。事实上,这个问题只能由一个对国际象棋有着扎实掌握的人来回答,这减少了潜在的回答者的数量。@zx81我试图在最后两段和示例中清楚地陈述我的观点。我想匹配字母表中已匹配的字母之前或之后的字母。@徽记:您可能很清楚,但对我(偶尔下棋的人)和其他人来说还不够清楚。我建议你添加一些应该匹配的动作和不应该匹配的动作的例子。