我必须递归搜索一个单词,然后选择一行或多行,直到)。 我的文件如下所示,输出如下所述。
SET var1 = FormatValue(A1,B1,B2);
SET var2 = FormatValue(X1,
X2,
X3);
DEFINE VAR3;
SET var4 = FormatValue(z1,z2,
z3);
我想搜索包含“set”的所有行,直到右括号“)”我希望输出为
SET var1 = FormatValue(A1,B1,B2);
SET var2 = FormatValue(X1, X2, X3);
SET var4 = FormatValue(z1,z2, z3);
使用TXR:
$ txr set.txr data
SET var1 = FormatValue(A1,B1,B2);
SET var2 = FormatValue(X1, X2, X3);
SET var4 = FormatValue(z1,z2, z3);
set.txr
中的代码:
@(repeat)
@ (freeform " ")
SET @var = @fun(@args);
@ (do (put-line `SET @var = @fun(@args);`))
@(end)
通常,TXR Pattern 语言面向多行文本。
freeform
指令改变了纪律。接下来的模式匹配与输入的更改版本进行匹配,其中行被折叠成一根巨大的行。可选字符串参数指定行终止序列,默认为 \n
(换行符)。
freeform
后面的模式匹配匹配到部分虚拟行后,将虚拟行中未匹配的部分转换回多行;随后的模式匹配又回到了多行规则中。