Rebol/Red 解析:如何在 2 个标记之间复制
Rebol/Red parse: how to copy between 2 marks
我希望能够在解析规则中的 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
您正在尝试使用 PARSE 实现 "DO desire" 复制。 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!>
意味着 "look for b",而不是 "jump to the position of b"。因此,当您说 to mark1
时,您正在调用另一场比赛。如果要将解析位置设置为mark1中记录的具体位置,则在解析规则中使用:mark1
。
两种选择 solutions/rules 工作在红色
rule: [
to "b" copy text thru "e" to end
]
和
rule: [ to "b" collect [keep thru "e"] to end]
text: first parse src rule
我希望能够在解析规则中的 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
您正在尝试使用 PARSE 实现 "DO desire" 复制。 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!>
意味着 "look for b",而不是 "jump to the position of b"。因此,当您说 to mark1
时,您正在调用另一场比赛。如果要将解析位置设置为mark1中记录的具体位置,则在解析规则中使用:mark1
。
两种选择 solutions/rules 工作在红色
rule: [
to "b" copy text thru "e" to end
]
和
rule: [ to "b" collect [keep thru "e"] to end]
text: first parse src rule