需要有关TCL中正则表达式的帮助

use*_*323 2 regex tcl

任何人都可以帮助我在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)

任何人都可以解释一下这些是如何执行的吗?我很难理解.

Jer*_*rry 6

正则表达式首先具有锚点,^并且$在括号中指示的主捕获组周围,([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个部分中的任何一个,则匹配成功.

现在,对于个别部分:

  1. [01]?[0-9][0-9]?这意味着它匹配0或1次[01](0或1),然后匹配任何数字,再次任何数字,如果有的话.总之,它接受字符串000,199但不包括199以上的字符串.

  2. 2[0-4][0-9] 这遵循与上面相同的逻辑,除了它验证数字从200到249的字符串.

  3. 25[0-5] 最后,这个验证字符串的数字从250到255.

由于没有什么更多的,只有数字,从000255会在验证成功.

这就是9,64和255通过的原因,但不是256或1000.