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

时间:2017-10-28 08:49:27

标签: parsing html-parsing rebol red

我有一个解析规则返回true但它没有按预期插入我的文本:html没有改变,而它应该插入主结束div的末尾。我试图使用像How to parse inside HTML tags with REBOL?

这样的计数器

更新:我还不知道如何在counter = 0时立即中断解析,以免在main之后的最后一个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

1 个答案:

答案 0 :(得分:1)

此处使用探测进行调试

的解决方案
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 ,因为始终是第一个满足的条件。

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

结束规则

的示例
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
]