请在手册页中解释tcl regexp内联示例

时间:2014-08-01 00:14:43

标签: regex pattern-matching tcl inline

在尝试理解regexp和--inline use时,看到了这个例子,但无法理解它是如何工作的。

手册页的链接是:http://www.tcl.tk/man/tcl8.4/TclCmd/regexp.htm#M13 在那里,在--inline选项下,给出了这个例子:

 regexp -inline -- {\w(\w)} " inlined "
 => {in n}
regexp -all -inline -- {\w(\w)} " inlined "
 => {in n li i ne e}

这是怎样的" {\ w(\ w)}"收益" {in n}"?请有人解释一下。 感谢帮助。

由于

2 个答案:

答案 0 :(得分:3)

如果未给出-inline但未-allregexp将返回一个列表,其中包含匹配的整个区域的一个值和每个子匹配的一个值(括号捕获的区域)。要查看整个匹配是什么,请忽略括号:模式现在为{\w\w},匹配字符串中的两个第一个单词字符(in)。第一个子匹配是你跳过一个单词字符(括号外的\w)然后捕获下一个单词字符(括号内的\w)得到的n

如果同时给出了-inline-allregexp会重复执行此操作,并在上一次完整匹配后的第一个字符处重新启动。

答案 1 :(得分:1)

我认为要理解-inline,您必须先了解-inline将匹配(和子匹配)放入列表中。因为如果你有......

regexp -- {\w(\w)} " inlined " m1 m2

你会......

% puts $m1
in
% puts $m2
n

由于整个匹配in存储在m1,而捕获组n的子匹配存储在m2

将这些放入列表中(即使用-inline时)会给{in n}

如果您现在同时拥有-all-inline(假设您已经知道-all检索regexp中的所有非重叠匹配),则无法再使用变量输入字符串后面的名称,所以你得到一个包含所有匹配和子匹配的列表,如果我必须将它们命名为ms(分别用于匹配和子匹配),你有:

in n  li i  ne e
m  s  m  s  m  s