2

http://www.rebol.com/docs/core23/rebolcore-15.htmlによると

change / partを使用して解析と置換を行うことができますが、ブロックを置換しようとするだけではうまくいきません。

<mytag > ... </mytag>

「MyString」による

content:  {<mytag id="a" 111111111111111>
</mytag>
aaaaaaaaaaaaaaa
aaaaaaaaaaaaaaa
<mytag id="b" 22222222222222222>
</mytag>

<mytag id="c" 3333333333333>
</mytag>
aaaaaaaaaaaaaaa
aaaaaaaaaaaaaaa
<mytag id="d" 444444444444444>
</mytag>
}


mytag: [  to {<mytag} start: (
)
  thru {<mytag}
  to {id="} thru {id="} copy ID to {"} thru {"}
  to {</mytag>} 

  thru {</mytag>} 
  ending:

  (change/part start "mystring" ending)
  mark:
  (  write clipboard:// mark
  input)  
]

rule: [any mytag to end]

parse content rule
4

2 に答える 2

3

http://en.wikibooks.org/wiki/REBOL_Programming/Language_Features/Parse#Modifying_the_input_seriesをご覧ください。

于 2010-04-13T21:22:28.173 に答える
2

Ladislav の提案は、入力ストリームを変更せずに解決することです。これは、パフォーマンスの問題を引き起こす可能性があり、デバッグが困難になります。出力を個別に構築するだけです。例えば

result: copy ""

mytag: [
  [
    copy text to {<mytag} (if text [append result text])
    thru {<mytag}
    to {id="} thru {id="} copy ID to {"} thru {"}
    thru {</mytag>} 
    (append result reform ["__" ID "__"])
  ]
  | 
  skip
]

rule: [any mytag to end]

parse content rule

result
于 2010-04-14T17:10:15.900 に答える