正则表达式匹配零或无和Or

时间:2014-12-23 21:20:06

标签: regex

如何匹配一系列可选字符或不同字符?

例如:

我开始匹配字母" 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"和#34; Qkq"但它也会匹配" KKKK"," qkQK"," qqqq"没有一个是有效的。

5 个答案:

答案 0 :(得分:1)

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

试试这个。看看演示。

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

答案 1 :(得分:1)

你的正则表达式工作正常,以捕获你需要锚定正则表达式的破折号:

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

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

答案 2 :(得分:0)

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

示例:Regex Example

答案 3 :(得分:0)

尝试使用方括号,如下所示:/[KQkq]|-/。方括号内的任何内容都是可选的。字面意思是匹配括号之间的任何内容

答案 4 :(得分:0)

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