powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пятничная задачка по regexpr
10 сообщений из 10, страница 1 из 1
Пятничная задачка по regexpr
    #39331338
TREY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть текст
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<div id=1>
    <div id=2>
        <div id=3>
            <div id=4>
              <div id=8> </div><div id=9> </div>

            <div id=9>
            </div>
            </div>
        </div>
    </div>
    <div id=5>
        <div id=6>
        </div>
    </div>
    <div id=7>
    </div>
</div>


В самих div может быть абсолютно разный вложенный контент .

Задача - вернуть все возможные div блоки с 1,2,3,4,5 и тд вложениями div ,
только у блоков могут быть id или class , а могут не быть , в примере id для наглядности ..
...
Рейтинг: 0 / 0
Пятничная задачка по regexpr
    #39331692
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TREY, в чем трудность? Линейный тривиальный алгоритм, либо я вас плохо понял
...
Рейтинг: 0 / 0
Пятничная задачка по regexpr
    #39331800
TREY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

regexpr
...
Рейтинг: 0 / 0
Пятничная задачка по regexpr
    #39331912
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эту задачу невозможно решить на регулярных выражениях.
В RE нету возможности учитывать количество открывающих-закрывающих скобок. Это уже задача для парсера умеющего разбирать бесконтекстную грамматику.
...
Рейтинг: 0 / 0
Пятничная задачка по regexpr
    #39332124
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Из мэйнстримных языков мне не известен тот, который не умеет сейчас работать с xml
2. Даже если не умеет, решается набором простых действий вроде таких:
- найти все открывающие и закрывающие тэги
- рекурсивная функция, которая формирует многоуровневый массив из полученного массива тэгов, проваливаясь глубже (в новосозданный элемент), когда видит открывающий тэг, и поднимаясь на уровень выше, когда видит закрывающий тэг

Чистой регуляркой не реализуемо, потому как она линейна, а не рекурсивна. То есть задачу с помощью одних регулярок (без вспомогательных функций) можно решить, но только если множество раз запускать функцию поиска и замены (по сути тот же второй вариант, только более запутанно и сложно)
...
Рейтинг: 0 / 0
Пятничная задачка по regexpr
    #39332166
TREY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЭту задачу невозможно решить на регулярных выражениях.
не верю вам..


Програмёр1. Из мэйнстримных языков мне не известен тот, который не умеет сейчас работать с xml
хтмл != xml


ПрограмёрЧистой регуляркой не реализуемо, потому как она линейна, а не рекурсивна.
как раз читаю про рекурсивные регулярки


Програмёрможно решить, но только если множество раз запускать функцию поиска и замены (по сути тот же второй вариант, только более запутанно и сложно)
это первое что пришло мне в голову , но не могу выбрать тег див в котором нету дивов .. То есть выбирать дивы у которых нету вложения, добавлять их в массив , и удалять из текста , а потом снова искать , добавлять и удалять , пока не будет равно нулю ..
...
Рейтинг: 0 / 0
Пятничная задачка по regexpr
    #39332180
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TREYWhite OwlЭту задачу невозможно решить на регулярных выражениях.
не верю вам..


Програмёр1. Из мэйнстримных языков мне не известен тот, который не умеет сейчас работать с xml
хтмл != xml


ПрограмёрЧистой регуляркой не реализуемо, потому как она линейна, а не рекурсивна.
как раз читаю про рекурсивные регулярки


Програмёрможно решить, но только если множество раз запускать функцию поиска и замены (по сути тот же второй вариант, только более запутанно и сложно)
это первое что пришло мне в голову , но не могу выбрать тег див в котором нету дивов .. То есть выбирать дивы у которых нету вложения, добавлять их в массив , и удалять из текста , а потом снова искать , добавлять и удалять , пока не будет равно нулю ..

Коллега, HTML = XML... Очень даже равно :)
HTML это частный случай XML. И кстати под прасинг именно HTML тоже много чего написано готового. На каком языке пишите? Возможно смогу помочь в поисках нужного готового функционала

Насчёт рекурсивных регулярок.... кхм... Теперь мне ещё больше захотелось узнать на чём Вы пишите. Потому как мне неизвестны случаи реализации рекурсивных регулярок "из коробки".

Насчёт запуска регулярки рекурсивно - это забивание гвоздей ковшом бульдозера! Вы представляете какие будут расходы у Вас на это дело?

В общем, как уже писал, лучше скажите на чём задачу решаете , а я постараюсь помочь с поиском нужных библиотек для работы с DOM
...
Рейтинг: 0 / 0
Пятничная задачка по regexpr
    #39332191
TREY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

delphi xe4, там есть инди и другое , я вкурсе
...
Рейтинг: 0 / 0
Пятничная задачка по regexpr
    #39332588
F#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
F#
Гость
Програмёр
Коллега, HTML = XML... Очень даже равно :)
HTML это частный случай XML.

Нет XHTML это частный случай XML.
HTML это частный случай SGML.

Например в HTML можно не закрывать теги (<br>), а в xhtml нельзя - только <br/>
...
Рейтинг: 0 / 0
Пятничная задачка по regexpr
    #39332784
TREY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
че то мозгов не хватило рекурсивную регулярку написать , по этому решил послушать @Програмёр , сделал через IHtmlElement.

Может кому то пригодиться , выводит все div в TStringlist:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
function GetContent(inp: string; tegname: string): TStringlist;
var
  Document: IHTMLDocument2;
  Cache: string;
  V: OleVariant;
  i: Integer;
  Tags: IHTMLElementCollection;
  Tag: IHtmlElement;
  body: IHTMLElement2;
begin
  result := TStringlist.Create;
  Cache := inp;
  Document := coHTMLDocument.Create as IHTMLDocument2;
  V := VarArrayCreate([0, 0], varVariant);
  V[0] := Cache;
  Document.write(PSafeArray(TVarData(V).VArray));
   if not Supports(Document.body, IHTMLElement2, body) then
    raise Exception.Create('Can''t find <body> element');
  Tags := body.getElementsByTagName(tegname);
  for i := 0 to Tags.length - 1 do
  begin
    Tag := Tags.item(i, EmptyParam) as IHtmlElement;
    result.Add(Tag.innerHTML)
  end;
end;

procedure Taf.Button63Click(Sender: TObject);
begin
  memo2.lines.Text := GetContent(memo.lines.Text, 'div').Text;
end;
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пятничная задачка по regexpr
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]