我想知道为什么下面的正则表达式接受 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。(如果重复 0 次,则^
锚不会触发,因此它可以匹配任何地方。)您应该在重复之外提取锚。就像是...
^(?:[GTR]\d{0,2})+$
- start
--- -- any number of repetitions (1+) of
----- any of "G", "T", or "R"
------- 0-2 digits
- end
如果你的主要序列是重复的,那么捕获组没有任何意义,所以我已经剥离了它们。
现在,您的正则表达式匹配一个空字符串,并且什么也找不到。
(...){0, 5}
可以匹配...
0 次,从而在每个字符串上找到匹配项。
您的特定要求(仅匹配这 4 个输入)可能需要这样的正则表达式
^(?:G01)|[GRT]00$
http://rubular.com/r/BrlxDfGkdf
如果您希望能够在每行中获得多个匹配项,则不要只使用锚点:^
和$
(?:G01)|[GRT]00
我认为因为你允许 0-5 次重复,所以任何东西都可以匹配 0 次。为什么不强制它至少匹配一次?
"((^G0{0,2}$)|(^T|^R0{0,2}$))+"