Rebol/Red Parse:如何在两个标记之间复制内容
解决Rebol/Red Parse规则中复制两个标记间内容的问题
我来帮你搞定这个Parse规则的问题~你原来的写法逻辑顺序有点问题,导致结果不符合预期,咱们一步步理清楚:
原代码的问题分析
你写的规则:
rule: [ to "b" mark1: thru "e" mark2: to mark1 copy text to mark2 ]
这里的核心错误是Parse的to指令只能向前扫描,不能回溯:
- 执行到
mark2:时,当前位置已经在"e"的后面(因为thru "e"会跳过整个"e"字符串); - 接下来的
to mark1试图从"e"之后的位置往回找mark1的位置,这完全违背了Parse的扫描逻辑,自然得不到正确的结果。
正确的实现方式
我们需要调整顺序,先记录起始和结束的位置标记,再直接复制两个标记之间的内容:
src: {a b c d e f} rule: [ to "b" mark1: ; 定位到"b"的起始位置,记录标记点mark1 thru "e" mark2: ; 扫描过"e",此时mark2停在"e"的后面 copy text mark1 to mark2 ; 从mark1复制到mark2的位置 ] ; 执行解析并输出结果 parse src rule print text ; 输出:b c d e
逻辑说明
to "b":向前扫描,直到找到"b"的起始位置;mark1::记录当前位置作为内容的起始点;thru "e":继续向前扫描,直到跳过整个"e"字符串;mark2::记录当前位置作为内容的结束点;copy text mark1 to mark2:从mark1标记的位置开始,复制到mark2标记的位置,结果存入text变量。
这样就能准确获取"b"到"e"之间的完整内容啦~
内容的提问来源于stack exchange,提问作者user310291
相关产品推荐
相关产品推荐

