Вложенность html тегов

Тема в разделе "Регулярные выражения", создана пользователем Orbit@L, 18 июл 2012.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Orbit@L

    Orbit@L Писатель

    Регистр.:
    19 июн 2012
    Сообщения:
    7
    Симпатии:
    2
    Есть html код с вложенностью тега div, в котором вложенность может быть до третьего уровня.
    Код:
    <div class="wrap">
      <div class="body" title="FAQ">
          Some text
          <div class="wrap">
            <div class="body" title="title1"> // Level 2
            Text1...
            </div>
          </div>
          <div class="wrap">
            <div class="body" title="title2"> // Level 2
            Text2...
            </div>
          </div>
          <div class="wrap">
            <div class="body" title="title3"> // Level 2
            Text3...
            <div class="wrap">
                <div class="body" title="title4"> // Level 3
                Text4...
                </div>
            </div>
          </div>
      </div>
    </div>
    Помогите написать регулярное выражение с заменой html на bbcode, т.к. мое работает корректно только с тегами без вложенности.
    Код:
    "<div class="body" title="(.*?)">(.*?)</div>", "[tag=$1]$2[/tag]"
     
  2. xpert13

    xpert13 <(*_*)>

    Moderator
    Регистр.:
    7 ноя 2008
    Сообщения:
    182
    Симпатии:
    453
    Регулярные выражения не подходят для вложенных структур. Единственный вариант, который я вижу, это написать 3 регулярки и запускать их по очереди:
    1. Для третьего уровня вложенности
    2. Для второго
    3. Для первого

    Запускать нужно именно в таком порядке.
     
  3. Orbit@L

    Orbit@L Писатель

    Регистр.:
    19 июн 2012
    Сообщения:
    7
    Симпатии:
    2
    Всем спасибо за ответы :), я нашел решение. Кому интересно:
    Код:
    string s1 = Regex.Replace(outstring, @"<div class=""wrap"">\s*<div class=""body"" title=""(.*?)"">", "[tag=$1]", RegexOptions.Singleline);
    string s2 = Regex.Replace(s1, @"</div>\s*</div>", "[/tag]", RegexOptions.Singleline);
    Получим:
    Код:
    [tag=FAQ]
        Some text
        [tag=title1] // Level 2
            Text1...
            [/tag]
        [tag=title2] // Level 2
            Text2...
            [/tag]
        [tag=title3] // Level 2
            Text3...
            [tag=title4] // Level 3
                Text4...
                [/tag]
        [/tag]
    </div>
    Как видно я забыл ещё один </div> :rolleyes:
     
Статус темы:
Закрыта.