我正在尝试编写一个正则表达式来验证 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 ...
但这不是很有效。我想使用分组,这样我就可以做 rook-pawn 和其他所有事情。我有这样的想法:
/([b-g])(x(\1±1))?/
表示“字母 b 到 g 后面可能跟在它们之前或之后的字母”。
最佳答案
关于ruby - 正则表达式根据之前匹配的内容匹配某些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24344875/