Поиск подстроки между двух подстрок ?

  • Автор темы Автор темы Baton77
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
B

Baton77

Использую функию inside - возвращает подстроку, вложенную между парой
подстрок Front ... Back
Код:
function inside(const Search, Front, Back: string): string;
var
Index, Len: byte;
begin
Index := RPos(Front, before(Search, Back));
Len := Pos(Back, Search);
if (Index > 0) and (Len > 0) then
Result := Copy(Search, Index + 1, Len - (Index + 1))
else
Result := '';
end;
Она цепляет ещё две функции : RPos() возвращает первый символ последней найденной
подстроки Find в строке Search.
Код:
function RPos(const Find, Search: string): byte;
var
FindPtr, SearchPtr, TempPtr: PChar;
begin
FindPtr := StrAlloc(Length(Find) + 1);
SearchPtr := StrAlloc(Length(Search) + 1);
StrPCopy(FindPtr, Find);
StrPCopy(SearchPtr, Search);
Result := 0;
repeat
TempPtr := StrRScan(SearchPtr, FindPtr^);
if TempPtr <> nil then
if (StrLComp(TempPtr, FindPtr, Length(Find)) = 0) then
begin
Result := TempPtr - SearchPtr + 1;
TempPtr := nil;
end
else
TempPtr := #0;
until TempPtr = nil;
end;
и before() возвращает часть стоки, находящейся перед
первой найденной подстроки Find в строке Search
Код:
function before(const Search, Find: string): string;
var
index: byte;
begin
index := Pos(Find, Search);
if index = 0 then
Result := Search
else
Result := Copy(Search, 1, index - 1);
end;
Так вот, глюк заключается в том, что inside возвращает только первую найденную подстроку в строке, а их может быть, скажем, десять...
В новой строке происходит то же.
Как исправить? :blink:
 
например, удалить найденную подстроку из основной (Delete (Pos (sub, s), Length (sub)) и т.д.) и в оставшейся части искать дальше. так можно получить список всех вхождений строки.
 
Вобщем функция работает, но не так как надо...
Задаю разделители
Код:
Temp := inside(text, '=', ']');
Вот пример строки в которой надо реализовать этот Temp :
Интерес [ color =#ff0009 ]публики[ /color ] к [ size =18 ]классическому[ /size ] форм-фактору в [ color =#1200ff ]бизнес-категории[ /color ] понятен.
Так вот, функция обрабатывает как Temp только #ff0009 , а 18 и #1200ff игнорирует и
переходит на обработку следующей строки.
Как заставить её понимать и 18 и #1200ff ? :)
 
Вроде как дали ответ уже .. или удаляй то что было найдено или ищи вхождение начиная с необходимой позиции в строке ...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab