re = /^.*?((?:\s+\d+\.\s+Nx?[a-h][1-8]\s+[RBKQN]?x?[a-h][1-8]){2,}).*$/m
str = '[Event "Live Chess"] [Site "Chess.com"] [Date "2023.02.17"] [Round "-"] [White "-"] [Black "-"] [Result "1-0"] [WhiteElo "925"] [BlackElo "939"] [TimeControl "180+2"] [EndTime "17:39:13 PST"] [Termination "- won by checkmate"]
e4 e5 2. Nc3 d6 3. Bc4 h6 4. d3 Nc6 5. f4 Qe7 6. Nf3 Be6 7. f5 Bxc4 8. dxc4 O-O-O 9. b3 Nf6 10. O-O g5 11. fxg6 fxg6 12. Nh4 g5 13. Ng6 Qg7 14. Nxh8 Qxh8 15. Nd5 Nxd5 16. exd5 Nd4 17. c3 Nxb3 18. axb3 a6 19. b4 Be7 20. Qg4+ Kb8 21. b5 axb5 22. cxb5 b6 23. Qa4 Kc8 24. Qa8+ Kd7 25. Qc6+ Kc8 26. Ra8# 1-0
[Event "Live Chess"] [Site "Chess.com"] [Date "2023.02.17"] [Round "-"] [White "-"] [Black "-"] [Result "1-0"] [WhiteElo "914"] [BlackElo "841"] [TimeControl "180+2"] [EndTime "19:06:57 PST"] [Termination "- won by resignation"]
e4 e5 2. Nc3 Nc6 3. Bc4 Nf6 4. d3 Bc5 5. Na4 Bb4+ 6. c3 Be7 7. f4 b5 8. Bxb5 a6 9. Bc4 O-O 10. f5 d5 11. exd5 Nxd5 12. Nf3 Bxf5 13. O-O Bc5+ 14. Nxc5 Nf4 15. Nxe5 Nxe5 16. Rxf4 Bg4 17. Rxg4 Nxg4 18. Qxg4 Re8 19. Bh6 g6 1-0'
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html