一个正则表达式的问题

有四个字符串:
[list]
[*]1.k[color=red]z[/color][color=blue]bf[/color]ldsf
[*]2.k[color=red]z[/color][color=blue]q[/color]ldsf
[*]3.k[color=red]y[/color][color=blue]bf[/color]ldsf
[*]4.k[color=red]y[/color][color=blue]q[/color]ldsf
[/list]

写一个正则表达式全部可以匹配
其中k,ldsf是固定的,
第二个字母可能是z、y
第三个字符可能是bf、q

我写的表达式:
[code="java"]k[z|y][q|bf]ldsf [/code]
这样只能匹配第2,4这两个,
如果写成这样
[code="java"]k[z|y][q|b]f?ldsf[/code]
则4个都可以匹配。

问题是,不知道为什么第一个表达式不能全匹配?

你没有理解[]的用法,你的第一个写法实际上就是
k[zy][qbf]ldsf
第二个写法实际就是
k[zy][qb]f?ldsf
第二个写法也是有问题的
比如kzyqfldsf也会被匹配上,这个正确吗?

应该用括号表达式来匹配字符串而不是一个字(如果只能匹配你写的这4种的话)
kzyldsf

[zy] 第二个字母可能是z、y
(bf|q) 第三个字符(或者串)可能是bf、q

楼上的解答有些问题
[z|y]相当于z、y和竖线(|)