Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проверка Слова на Наличие в URL: Функция для Текстовых Строк в Pascal

Delphi , Синтаксис , Текст и Строки

Вопрос, который стоит перед разработчиками, заключается в необходимости проверки, является ли определённое слово частью URL в текстовом сообщении. Например, имея строку "Go to this page: http://mysite.com/?page=1", необходимо определить, содержит ли данная строка слово "page" в качестве части URL. Для решения этой задачи можно создать функцию, которая будет принимать исходную строку, ключевое слово и возвращать найденный URL, если он содержит указанное слово.

Решение проблемы

Для начала, давайте рассмотрим пример функции, которая решает поставленную задачу:

function GetLinkContaining(const Str, SubStr: string; out URL: string): boolean;
var
  SubStrPos, Start, End: Integer;
  i: Integer;
  URLBegin: Integer;
  ValidURLSpecialChars: array[0..10] of char;
  Prefixes: array[0..4] of string;
begin
  // Инициализация массивов для проверки
  SetLength(ValidURLSpecialChars, ['.', ':', '/', '?', '=', '&', '%', '~']);
  SetLength(Prefixes, ['http://', 'https://', 'ftp://', 'mailto:', 'www.']);
  // ... (далее следует код, выполняющий основную логику функции)
end;

Функция GetLinkContaining проверяет, содержит ли строка Str указанное подстроку SubStr в качестве части URL. Она возвращает True, если URL найден, и записывает его в переменную URL. В противном случае возвращает False. Для определения начала URL используются возможные префиксы (например, http://, https://), а также проверяется наличие специальных символов, характерных для URL.

Подтвержденный ответ

В приведённом ниже коде реализована функция, которая определяет, содержит ли строка Str указанное подстрока SubStr в качестве части URL, и возвращает найденный URL, если он есть:

type
  TURLChar = function(const Char: Char): Boolean;
  TPrefix = string[0..4];

const
  ValidURLSpecialChars = ['.', ':', '/', '?', '='];
  Prefixes: array[0..4] of string = ('http://', 'https://', 'ftp://', 'mailto:', 'www.');
  ValidURLSpecialCharsSet: TSet of Char;
  PrefixesSet: TSet of string;
  URLChar: TURLChar = function(Char: Char): Boolean is
    begin
      result := Char in ['0'..'9', 'a'..'z', 'A'..'Z', ValidURLSpecialChars];
    end;

var
  ValidURLSpecialCharsSet: TSet of Char;
  PrefixesSet: TSet of string;
  URLBegin: Integer;
  SubStrPos: Integer;
  Start, End: Integer;
  i: Integer;

function IsValidURLChar(const Char: Char): Boolean;
begin
  result := Char.IsLetterOrDigit or Char in ValidURLSpecialCharsSet;
end;

function GetURLPrefix(const Str: string): string;
var
  i: Integer;
begin
  Result := '';
  for i := Low(Prefixes) to High(Prefixes) do
    if Pos(Prefixes[i], Str) > 0 then
    begin
      Result := Prefixes[i];
      Break;
    end;
end;

function GetLinkContaining(const Str, SubStr: string; out URL: string): Boolean;
begin
  Result := False;
  URLBegin := Pos(GetURLPrefix(Str), Str);
  if URLBegin = 0 then
    Exit(False);
  SubStrPos := PosEx(SubStr, Str, URLBegin);
  if SubStrPos = 0 then
    Exit(False);
  Start := SubStrPos;
  while Start > 1 and URLChar(Str[Start]) do
    Dec(Start);
  End := SubStrPos + Length(SubStr);
  while End < Length(Str) and URLChar(Str[End + 1]) do
    Inc(End);
  Result := True;
  SetLength(Str, End - Start + 1);
  Copy(Str, StrDef[Start], Result);
end;

procedure TestFunction;
var
  s, link: string;
begin
  if GetLinkContaining('Go to this page: http://mysite.com/?page=1', 'page', link) then
    ShowMessage(link);
  if GetLinkContaining('This is my favourite site (www.bbc.co.uk).', 'bbc', link) then
    ShowMessage(link);
  // ... (реализация функции для учета регистра и локали, а также другие проверки и оптимизации)
end;

В этом коде используется функция GetLinkContaining, которая определяет границы URL, содержащего указанный подстроки SubStr, и возвращает его. Для работы с регистром и локализацией в коде могут быть использованы дополнительные функции и процедуры, например, AnsiLowerCase для преобразования строки в нижний регистр.

Заключение

В данной статье мы рассмотрели задачу проверки текста на наличие в нём URL, содержащего определённое слово, и привели пример реализации функции, которая решает эту задачу. Для разработчиков на Pascal и Delphi, работающих с текстовой обработкой, такая функция может быть полезным инструментом.

Создано по материалам из источника по ссылке.

Вопрос заключается в создании функции на языке Pascal, которая проверяет, содержит ли данная текстовая строка URL, в котором присутствует определённое слово.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Текст и Строки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 08:57:43/0.0050711631774902/1