如何匹配一系列可选字符或不同字符?
例如:
我开始匹配字母" 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"没有一个是有效的。
答案 0 :(得分:1)
答案 1 :(得分:1)
你的正则表达式工作正常,以捕获你需要锚定正则表达式的破折号:
^(K?Q?k?q?|-)$
没有锚点,第一部分K?Q?k?q?
匹配任何内容,包括空字符串和-
。
答案 2 :(得分:0)
您是否尝试过([KQkq]|-)
甚至([KQkq]|[-])
答案 3 :(得分:0)
尝试使用方括号,如下所示:/[KQkq]|-/
。方括号内的任何内容都是可选的。字面意思是匹配括号之间的任何内容。
答案 4 :(得分:0)
我认为这将满足您的需求:(K?Q?k?q?|-)