tl;dr
我正在寻找一个只与以下字符串匹配的正则表达式:
+
(=)
+ (=)
#
动机:
在国际象棋中,一步棋可以是一盘棋,也可以是一盘棋。只要不是死对头,玩家可以在下一步棋后向对手提供平局。
我正在制作一个玩具项目,它解析按照FIDE规则编写的国际象棋游戏;它们指定使用以下后缀来指示前面的可能性:
check mate表示为+
;
(=)
.表示为
因此,以下是唯一有效的后缀:
抽签(nothing:移动不是支票,玩家不提供抽签(no check;a draw).
(=)
is offered)
+
(check;no draw offered)..
+ (=)
(check;A draw is offered).
#
)#
(check mate;由于游戏结束后不能提供抽签)。我正在努力将其转换为正则表达式。我想表达的是:
("+" (0 or 1 times) followed by "(=)" (0 or 1 times)) or ("#" (0 or 1 times))
我做了几次尝试,但都失败了。为了展示我的作品,我添加了这个,但它可能是垃圾:((\+{0,1}|(\+ (=)){0,1})|#){0,1}
发布于 2018-12-19 07:55:06
这些是作为标志的组匹配方面的选项。
([ ])|(\(=\))|(\+)(?!\(=\))|(\+\(=\))|(\#)
解释
( [ ] ) # (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).
发布于 2018-12-19 08:15:03
这是一种可能性:
((\+{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
)
发布于 2018-12-19 08:23:14
只有check case是一个特例,其他两个(check,draw)可以组合在一起,每一个都是可选的:
https://stackoverflow.com/questions/53842631
复制相似问题