不明白正则表达式的结果

时间:2013-08-06 15:44:27

标签: java regex

我想知道为什么下面的正则表达式接受1。

"((^G0{0,2}$)|(^T|^R0{0,2}$)){0,5}"

我希望我的正则表达式能够接受序列G00,G01,T00,R00多次。 目前我只是试图让G00,T00,R00多次,但我的正则表达式也接受1作为输入。 正则表达式也应该接受G,G0,T,T0,R,R0,但目标是有3个字符的序列。

3 个答案:

答案 0 :(得分:2)

正则表达式匹配交替的零重复,匹配长度为0.(如果重复0次,^锚点不会触发,因此它可以在任何地方匹配。)你应该在外面提取锚点重复。有点像...

^(?:[GTR]\d{0,2})+$
-                    start
 ---            --   any number of repetitions (1+) of
    -----            any of "G", "T", or "R"
         -------     0-2 digits
                  -  end

如果您的主要序列重复,那么捕获组没有任何意义,所以我已将它们剥离。

答案 1 :(得分:1)

现在,你的正则表达式匹配一个空字符串,根本找不到任何内容。

(...){0, 5} 

可以匹配... 0次,从而在每个字符串上找到匹配项。


您的特定要求(仅匹配那4个输入)可能需要像这样的正则表达式

^(?:G01)|[GRT]00$

http://rubular.com/r/BrlxDfGkdf

如果您希望每行能够获得多个匹配项,请不要只停留锚点:^$

(?:G01)|[GRT]00

http://rubular.com/r/3ODzf08eT5

答案 2 :(得分:0)

我认为因为你允许重复0-5次,任何东西都可以匹配0次。为什么不强迫它至少匹配一次?

"((^G0{0,2}$)|(^T|^R0{0,2}$))+"