Rebol / Red Parse html 规则 returns true 但未插入任何内容

Rebol / Red Parse html rules returns true but nothing is inserted

我有一个 returns 正确的解析规则,但它没有按预期插入我的文本:html 没有改变,而它应该在主要关闭的末尾插入 div。我尝试使用 How to parse inside HTML tags with REBOL?

这样的计数器

更新:我也不知道如何在 counter = 0 时立即中断解析,以免在最后一次关闭 div 之后插入文本。

    content: {<div class="main">
      <h1>
        Big TITLE
      </h1>
      <div>
        <section>
          <p>a paragraph</p>
        </section>
         <section>
          <p>a paragraph</p>
        </section>
          <section>
          <p>a paragraph</p>
        </section>
       </div>
       <div>
          <p>Blah Blah</p>
       </div>

    </div>
    <div>
      Another Div
    </div>
    }

    rules: [
      thru <div class="main">
      (div-count: 1)
      some [
        to "<div" (++ div-count) thru "<div" thru ">"
        |
        to </div> mark: (-- div-count if div-count = 0 [insert mark "closing main div"]) thru </div>
      ]
      to end 
    ]
    parse content rules

这里有一个解决方案 probe to debug

rules: [
     thru <div class="main">
     (div-count: 1)
      some [
        "<div" (probe ++ div-count) skip
      |
        "</div>" mark:  ( probe -- div-count   if div-count = 0 [insert mark "closing main div"]) skip 
      |  skip
     ]
  ]
parse/all content rules 

您的规则存在的问题是,div 计数从不或很少被减去。解析指针直接指向下一个开口 div 因为 to 总是第一个满足的条件。

如果在成功条件后添加 到结束 ,则可以从解析中突破或更好地 return。如果您不确定,请使用方括号分组 [ 成功的子规则 ... 以结束 ]

一个带有结束规则的例子

end-rule: [] ; or none
rules: [
    thru <div class="main">
    (div-count: 1)
    some [
        ["<div" (++ div-count) skip]
    |
        ["</div>"mark:  (-- div-count   if div-count = 0 [insert mark "closing main div"  end-rule: [to end]]) end-rule ]
    |  skip
]

]