[英]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?|-)$
没有锚,第一部分K?Q?k?q?
匹配任何内容,包括空字符串和-
。
您是否尝试过([KQkq]|-)
甚至([KQkq]|[-])
示例:正则表达式示例
尝试使用方括号,例如: /[KQkq]|-/
。 方括号内的所有内容都是可选的。 从字面上看,这意味着在方括号之间匹配任何内容 。
我认为这将满足您的需求: (K?Q?k?q?|-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.