繁体   English   中英

正则表达式匹配零或无,或

[英]Regex matching zero or none and Or

如何匹配可选字符序列或其他字符?

例如:

我从匹配字母“ KQkq”开始

这些是顺序的但可选的,因此“ K?Q?k?q?”

但是输入是这四个字母之一或“-”,所以我尝试了“(K?Q?k?q?|-)”

这适用于字母,但与“-”不匹配

如果字母不是可选的,我将使用“((KQkq |-)”),它可以正常工作。

我已经尝试了许多不同的方法,例如将字母放入“((K?Q?k?q?)|-)”组中,但是我还不太想办法表达自己的需求。

***注意:正如我在问题中指出的那样:我将字母“ KQkq”按顺序匹配,但可选。 序列表示它们一个接一个地排列,因此“ KQkq”有效,“ KkQq”无效,“ kqKQ”或“ kkkk”或与序列KQkq不匹配的其他任何内容也不是。 可选表示一个字符可能存在或可能不存在。 因此,“ KQkq”有效,“ K”或“ Kk”或“ Qkq”也是有效的。 对于不知道的字符类,它们将毫无顺序地匹配该类中的任何字符。 因此,[KQkq] {1,4}确实会匹配“ KQkq”和“ Qkq”,但是也会匹配“ KKKK”,“ qkQK”,“ qqqq”,但都不有效。

^(?:(?:K?Q?k?q?)|-)$

试试看。看演示。

https://regex101.com/r/gQ3kS4/2

您的正则表达式工作正常,为了捕获破折号,您只需要锚定正则表达式即可:

^(K?Q?k?q?|-)$

没有锚,第一部分K?Q?k?q? 匹配任何内容,包括空字符串和-

您是否尝试过([KQkq]|-)甚至([KQkq]|[-])

示例:正则表达式示例

尝试使用方括号,例如: /[KQkq]|-/ 方括号内的所有内容都是可选的。 从字面上看,这意味着在方括号之间匹配任何内容

我认为这将满足您的需求: (K?Q?k?q?|-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM