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

时间:2014-06-21 18:59:13

标签: ruby regex chess

我尝试编写正则表达式来验证algebraic chess notation中的移动。这就是我到目前为止所拥有的:

/
    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后面可能跟着它们之前或之后的字母"。

1 个答案:

答案 0 :(得分:1)

使用替换来匹配相邻字母并不难,但由于正则表达式中没有字符算术,因此您无法找到任何紧凑的字符。

有人因为您的困境而对similar question表示同情。

漫漫长路是唯一的方法。