Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2011, 21:44   #1
Arsenx777
Delphi, c++, php
Форумчанин
 
Аватар для Arsenx777
 
Регистрация: 14.03.2011
Сообщений: 288
Вопрос Регулярные вырожения без компонентов, возможно ли?

И снова привет программмстам!
Помогите пожалуйста с регулярными вырожениями в delphi без компонентов, если это возможно?
Если не трудно приведите любые примеры или статьи, буду очень благодарен.
Весь интернет перерыл, и веде используются одни копоненты, типо "RegExpr"
Мудр тот, кто знает нужное, а не многое.

Arsenx777 вне форума Ответить с цитированием
Старый 28.06.2011, 21:58   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в Делфи нет встроенной поддержки, но вам что трудно установить нужную вам вещь?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.06.2011, 22:18   #3
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
веде используются одни копоненты, типо "RegExpr"
Ты не поверишь - RegExpr это не компонент)
mss вне форума Ответить с цитированием
Старый 28.06.2011, 22:30   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

присоединяюсь к мнению Пепла Феникса - чем Вам внешний компонент (точнее библиотека) TRegExpr не угодил?! Небольшой, бесплатный, КОРРЕКТНО РАБОТАЮЩИЙ, в исходниках (значит подходит под все версии Delphi), unicode поддерживает, установки НЕ ТРЕБУЕТ!...

Последний раз редактировалось Serge_Bliznykov; 28.06.2011 в 22:32.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.06.2011, 23:21   #5
Arsenx777
Delphi, c++, php
Форумчанин
 
Аватар для Arsenx777
 
Регистрация: 14.03.2011
Сообщений: 288
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
Ты не поверишь - RegExpr это не компонент)
а что? значет я не правильно понял!
RegExpr - как его подключить и пользаваться?
Мудр тот, кто знает нужное, а не многое.

Arsenx777 вне форума Ответить с цитированием
Старый 28.06.2011, 23:23   #6
exn
Пользователь
 
Регистрация: 06.02.2011
Сообщений: 51
По умолчанию

в XE есть встроенная поддержка рег. выражений.
exn вне форума Ответить с цитированием
Старый 29.06.2011, 00:51   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
RegExpr - как его подключить и пользаваться?
А о чём же тогда говорят тонны страниц, которое ты перерыл?

Цитата:
Весь интернет перерыл, и веде используются одни копоненты, типо "RegExpr"
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 29.06.2011, 08:53   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
RegExpr - как его подключить и пользаваться?
на ОФФСАЙТЕ документация на куче языков (в т.ч. и русский) + демки.


если вкратце, то подключить её надо так: распаковать исходники в любую папку.
если это не папка с текущим проектом, тогда в опциях указать директорию с исходниками
(или включить (добавить) RegExpr.pas в свой проект).
В своём проекте в секции uses вставить RegExpr
всё. можно использовать...

Последний раз редактировалось Serge_Bliznykov; 29.06.2011 в 08:56.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.09.2011, 19:25   #9
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

упрощение работы с RegExpr

Я написал модуль работающий через класс TRegExpr.

Сам класс TRegExpr не совсем удобен , поэтому я создал 3 функции, которых хватит в большинстве ситуаций

preg.match
preg.match_all
preg.replace

описание

Цитата:
Модуль RegExpr_preg.pas

разработан для упрощения работы с регулярными выражениями в делфи.

описание функций

function TPreg.match(const regexp, text: string):boolean;

проверяет соответвие заданного текста {text} с выражением {regexp}

function TPreg.match_all( const regexp, text: string; var slist: TStringList):boolean;

проверяет и находит соответвия заданного выражения {regexp} в тексте {text}

помещает результаты совпадений в строковый лист {slist}

function TPreg.replace( const regexp, reg_replace:string; text: string):string;

находит и заменяет в тексте {text} согласно выражениям {regexp} , {reg_replace}

//******

внутри модуля объявлена глобальная переменная {preg} класса TPreg

для работы с регулярными выражениями нужно подключить только модуль RegExpr_preg.pas

и вызывать функции для работы с ними через глобальную переменную {preg}

preg.match

preg.match_all

preg.replace

регулярные выражения {regexp} должны быть записаны в скобках / / и после последней должны быть указаны друг за другом модификаторы регулярных выражений, подробнее о модификаторах можно прочитать в документации к модулю RegExpr

пример

/Jav(aS)cript/i
исходный код модуля

Код:
unit RegExpr_preg;

interface
uses SysUtils, Classes, RegExpr;

type
TPreg = class(TObject)
    function match(const regexp, text: string):boolean;
    function match_all( const regexp, text: string;  var slist: TStringList):boolean;
    function replace( const regexp, reg_replace:string; text: string):string;
    private
      const mf = '/';
      function cut_modifier(var reg: string): string;
  end;

var preg:  TPreg;

implementation

{ TPreg }

function TPreg.cut_modifier(var reg: string): string;
var i:integer; tmf: string;
begin
  Result:='';
  if reg[1]<>mf then begin reg:=''; exit; end;
  for i := length(reg) downto 1 do
    if reg[i]=mf then break;
  Result:=copy(reg,i+1,length(reg)-i);
  reg:=copy(reg,2,i-2);
end;

function TPreg.match(const regexp, text: string): boolean;
var Robj:  TRegExpr; treg: string;
begin
  Robj:=TRegExpr.Create;
  treg:=regexp;
  Robj.ModifierStr:=cut_modifier(treg);
  Robj.Expression:= treg;
  result:=Robj.Exec(text);
  Robj.Free;
end;

function TPreg.match_all(const regexp, text: string; var slist: TStringList): boolean;
var Robj:  TRegExpr; treg: string;
begin
 Robj:= TRegExpr.Create;
 slist:=TStringList.Create;
 treg:=regexp;
 Robj.ModifierStr:=cut_modifier(treg);
 Robj.Expression:=treg;
 if Robj.Exec(text) then begin
 repeat
  slist.Add(Robj.Match[1])
 until not Robj.ExecNext;
 result:=true;
 end else result:=false;
 Robj.Free;
end;

function TPreg.replace(const regexp, reg_replace:string; text: string): string;
var Robj:  TRegExpr; treg: string;
begin
  Robj:= TRegExpr.Create;
  treg:=regexp;
  Robj.ModifierStr:=cut_modifier(treg);
  Robj.Expression:=treg;
  if Robj.Exec(text) then
     result := Robj.Replace(text,reg_replace,true)
  else result :=text;
  Robj.Free;
end;

end.
пример программы + документация



http://jqbook.narod.ru/works/TRegExp.zip

PS модератор, поправь название темы пожалуйста, а то как-то неграмотно

Последний раз редактировалось Lesha; 03.09.2011 в 19:41.
Lesha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа без компонентов xrob Компоненты Delphi 2 12.11.2010 17:20
Регулярные вырожения в PHP Claster Помощь студентам 0 11.10.2010 17:02
get post без компонентов GAGARIN-NEW Работа с сетью в Delphi 10 16.05.2010 22:24
Регулярные выражения. Выбрать все начиная с 1 и заканчивая 2, но без 3 vvzone PHP 9 02.04.2010 16:21
Создание компонентов без формы Delphi009 Общие вопросы Delphi 5 07.01.2010 16:58