我想知道为什么下面的正则表达式接受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个字符的序列。
答案 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
答案 2 :(得分:0)
我认为因为你允许重复0-5次,任何东西都可以匹配0次。为什么不强迫它至少匹配一次?
"((^G0{0,2}$)|(^T|^R0{0,2}$))+"