не берите в голову второй вопрос, я использую другой счетчик

я есть правила синтаксического анализа, которые возвращают true, но он не вставляет мой текст, как ожидалось: html не изменился, тогда как он должен был быть вставлен в конце основного заключительного div. Я пытался использовать счетчик, какКак анализировать HTML-теги с помощью REBOL?

Обновление: я также не знаю, как выйти из синтаксического анализа, как только counter = 0, чтобы не вставлять текст перед последним закрывающим div после main.

    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
 HostileFork28 окт. 2017 г., 12:55
Я понимаю желание сделать это простым, но нужно также понимать (как указывает ссылка на RegEx), что существуют ограничения. Если это просто быстро и грязно, хорошо, но это для одноразовых сценариев ...
 user31029128 окт. 2017 г., 11:09
@HostileFork Мне не нужно, и я не хочу полноценного парсера html, мне просто нужно проанализировать очень специфический html, поэтому правила обычно очень просты. В приведенном выше случае это кажется тривиальной идеей, за исключением того, что оно возвращает true, но все еще не вставляет, я не понял почему
 HostileFork28 окт. 2017 г., 11:02
Приведенный вами ответ превращает входную строку в структурированный блок. Если вы пытаетесь разбирать строки самостоятельно с помощью HTML ... этоопасный зоопарк! PARSE более понятен, чем RegEx истрого более мощныйи все же большинствопредупреждение о попытке обработать HTML напрямую с помощью RegEx относится и к PARSE. Смотрите @ rgchris'sразметка работы (он в чате здесь и на Red Gitter)

Ответы на вопрос(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 

Проблемы с вашими правилами состоят в том, что число делителей никогда не вычитается никогда или редко. Указатель разбора идет прямо к следующему открытиюДИВ какв всегда первое выполненное условие.

Вы можете разорвать или лучше вернуться из разбора, если вы добавитедо конца после успешного состояния. Если вы не уверены, используйте скобки для группировки[успешные подчиненные правила ... до конца]

Пример с конечным правилом

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
]

]

 user31029128 окт. 2017 г., 11:14
Привет работает лучше, чем у меня :), но я не смог понять, почему пропустить работает, а не через: пропустить пропускает только один символ. Также я забыл спросить, как вставить только сначала div count = 0? так как я хочу вставить только для div основной класс.
 user31029128 окт. 2017 г., 11:28
не берите в голову второй вопрос, я использую другой счетчик

Ваш ответ на вопрос