2010-06-25 31 views
1

我试图在正则表达式中进行匹配。在正则表达式中分组

开始用C或H,W以下/ 6字符:

它必须具有以下格式字符的字符串相匹配。 (共7个字符长) 从KK开始,接着8个字符。 (共10个字符长)

该字段限制为10个键入的字符。我有以下几点:

(((C|H).{6})|(KK.{8}))

它匹配KK + 8就好了。它在C + 5上失败了。它成功的C + 6就好了。然而它在C + 7,C + 8和C + 9上成功。

我假设我的分组是错的,任何人都可以指出我的错误吗?

这是.NET风格的正则表达式和我正在使用Regex.IsMatch来确定该字段是否完全匹配我的正则表达式。

回答

2

您需要anchor字符串的开始(^)和结束($):

^([CH].{6}|KK.{8})$ 

我还修剪了不必要的括号,改变(C|H)character class以提高可读性。

+0

有趣的是,我在印象之下IsMatch确保了整个字符串匹配,我想我错了。谢谢! – 2010-06-25 22:00:04

+0

@Aequitarum Custos:您可能一直在考虑Java中需要精确匹配的类似命名的方法'matches'。 – 2010-06-25 22:03:07

+0

啊哈,你说得对,.NET有同样的事情。不用于验证输入字符串,用于解析。解释我的困惑。 – 2010-06-25 22:10:16

1

你想从模式中捕捉任何东西吗? 如果没有,我会尝试这一个:

^(KK..|C|H).{6}$ 
+0

+1功能更简单。我相信以上是我的方法的正确方法,但这些字符串格式是状态指定的,并且可以独立于另一个进行更改。 – 2010-06-25 22:04:02

1

您需要添加一行anchors的起点和终点:

^(((C|H).{6})|(KK.{8}))$ 
0

我喜欢马克·拜尔斯回答最好,此例中(用于测试。 NET):

^[CH].{6}$|^KK.{8}$ 

原件将给出错误的匹配用于与C或H.

后超过6个字符的值