Rebol / Red解析:如何在2个标记之间复制

时间:2018-04-29 13:52:34

标签: parsing rebol red

我希望能够在解析规则中解析2个标记。对于一个有条件的例子:

src: {a b c d e f}

rule: [
    to "b" mark1: thru "e" mark2: 
    to mark1 copy text to mark2
]

这不起作用,文字包含“[”而不是我想要的内容:

b c d e

2 个答案:

答案 0 :(得分:3)

您正在尝试实施“渴望”#34;使用PARSE进行复制。 PARSE的COPY正在寻找模式,而不是将该系列视为职位。

您可以通过PAREN!在中间解析中转义到DO,如果解析规则到达该点,它将运行。

src: {a b c d e f}

rule: [
    to "b" mark1: thru "e" mark2: 
    (text: copy/part mark1 mark2)
    to end ;-- not strictly necessary, but makes PARSE return true
]

parse src rule

这将为您提供b c d e

的文字

请注意,无论是使用COPY还是使用TO,都无法双向使用。 TO <series!>表示&#34;寻找b&#34;而不是&#34;跳到b&#34;的位置。所以,当你说to mark1时,你正在调用另一场比赛。如果要将解析位置设置为记录在mark1中的特定位置,请在解析规则中使用:mark1

答案 1 :(得分:1)

以红色工作的两个替代解决方案/规则

rule: [
   to "b" copy text thru "e" to end
]

 rule: [ to "b" collect  [keep thru "e"] to end]
 text: first parse src rule