任何人都可以帮助我在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)
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释一下这些是如何执行的吗?我很难理解.
正则表达式首先具有锚点,^
并且$
在括号中指示的主捕获组周围,([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.