检测两种表达的castling符号

时间:2015-02-03 10:16:30

标签: java regex

嗨,大家好我有正确的正则表达式铸造表示法的问题。

O-O - King
O-O-O - Queen

我有以下代码

Pattern castlingKPattern = Pattern.compile("O-O");
Matcher castlingKMatch = castlingKPattern.matcher(pgn);

Pattern castlingQPattern = Pattern.compile("O-O-O");
Matcher castlingQMatch = castlingQPattern.matcher(pgn);

if (castlingKMatch.find()){

        System.out.println("Castling King: "+ pgn);

}       
}else if (castlingQMatch.find()){

        System.out.println("Castling Queen: "+ pgn);
}

但是下面的代码继续转到第一个if if而不是第二个if语句。即使我将输入更改为应该转到CastlingQMatch的O-O-O或第二个if。 你能帮忙吗?感谢

1 个答案:

答案 0 :(得分:1)

将第一个正则表达式限制为:

"(?<!O-)O-O(?!-O)"
    如果(?!-O)是下一个,则
  • -O为负面预测,表示匹配失败 如果(?!<O-)位于文字前面,则
  • O-为负面反馈意味着匹配失败

RegEx Demo