tl; dr
我正在寻找仅与以下字符串匹配的正则表达式:
+
(=)
+ (=)
#
动机:
在国际象棋中,一个动作可以(除其他外)成为支票或同伴。只要不是对位伴侣,玩家就可以在举手之后向对手平局。
我正在制作一个玩具项目,该项目可以解析按照国际棋联的规则编写的国际象棋游戏;他们指定使用以下后缀表示以前的可能性:
+
表示支票; #
表示一个配对。 (=)
表示。因此,以下是唯一有效的后缀:
(什么都没有:此举不是支票,玩家没有提供平局)。(=)
(不签;提供抽奖)+
(选中;不提供抽奖)。+ (=)
(选中;提供抽奖)。#
(检查队友;由于游戏结束,无法抽签)。我正在努力将其转换为正则表达式。我要表达:
("+" (0 or 1 times) followed by "(=)" (0 or 1 times)) or ("#" (0 or 1 times))
我做了几次尝试,但都失败了。本着展示我的工作的精神,我添加了这一部分,但这可能是垃圾:
((\+{0,1}|(\+ (=)){0,1})|#){0,1}
答案 0 :(得分:0)
这些是根据标志进行组匹配的选项。
([ ])|(\(=\))|(\+)(?!\(=\))|(\+\(=\))|(\#)
解释
( [ ] ) # (1), (nothing: the move is not a check, and the player is not offering a draw).
|
( \(=\) ) # (2), (no check; a draw is offered)
|
( \+ ) # (3), (check; no draw offered)
(?! \(=\) )
|
( # (4 start), (check; a draw is offered).
\+
\(=\)
) # (4 end)
|
( \# ) # (5), (check mate; no draw can be offered since the game is over).
答案 1 :(得分:0)
这是可能的:
((\+{0,1}( \(=\)){0,1})|#{0,1})
解释:
(
(\+{0,1} # A plus sign at most 1 time...
( \(=\)){0,1}) # Followed by "(=)" at most 1 time
| # ... or ...
#{0,1} # A hash sign at most 1 time
)
答案 2 :(得分:0)
仅将死是一个特殊情况,其他两个(检查,绘制)可以组合使用,每个都是可选的: