任何人都可以帮助我在 TCL 中执行以下正则表达式的“执行流程”。
% regexp {^([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])$} 9
1 (success)
%
%
% regexp {^([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])$} 64
1 (success)
% regexp {^([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])$} 255
1 (success)
% regexp {^([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])$} 256
0 (Fail)
% regexp {^([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])$} 1000
0 (Fail)
任何人都可以解释一下这些是如何执行的吗?我很难理解。
最佳答案
正则表达式首先在主要捕获组周围有 anchor ^
和 $
,此处用方括号表示 ([01]?[0-9][0 -9]?|2[0-4][0-9]|25[0-5])
这意味着它正在检查整个字符串。
其次,在捕获组内部,我们有 3 个部分:
[01]?[0-9][0-9]?
2[0-4][0-9]
25[0-5]
它们之间用|
(或)运算符隔开,即如果字符串满足这3个部分中的任何一个,则匹配成功。
现在,各个部分:
[01]?[0-9][0-9]?
这意味着它匹配 0 或 1 次 [01](0 或 1),然后是任何数字, 和任何数字,如果有的话。这一起接受像000
或199
这样的字符串,但不能超过 199。
<2[0-4][0-9]
这遵循与上述相同的逻辑,除了它验证数字从 200 到 249 的字符串。25[0-5]
最后,这个验证数字从 250 到 255 的字符串。
由于没有更多内容,只有从 000
到 255
的数字才能通过验证。
这就是为什么 9、64 和 255 通过,但没有通过 256 或 1000。
关于regex - 需要有关 TCL 中正则表达式的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18511465/