regexp

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

regexp

Сообщение Mayor » 05.09.2007 16:25:20

какой юнит работает с регулярными выражениями?

в смысле чем можно парсить текст?
Mayor
новенький
 
Сообщения: 20
Зарегистрирован: 04.09.2007 16:55:14

Сообщение Attid » 05.09.2007 16:29:22

Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение debi12345 » 06.09.2007 08:58:58

Attid писал(а):
Код: Выделить всё
regexpr

Слабоватый (хотя и компактный) модуль, самое страшное -не умеет работать с юникодом.
Поэтому пользуюсь 100% оснащенным TRegExpr с адресов http://anso.da.ru/ или http://anso.virtualave.net/
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение Mayor » 06.09.2007 09:10:33

debi12345 писал(а):
Attid писал(а):
Код: Выделить всё
regexpr

Слабоватый (хотя и компактный) модуль, самое страшное -не умеет работать с юникодом.
Поэтому пользуюсь 100% оснащенным TRegExpr с адресов http://anso.da.ru/ или http://anso.virtualave.net/


Backreferences , Minimal matching ,Extended character classes держит?

кросплатформенность есть?

нужны одновременно под лином и гигвином ...
Mayor
новенький
 
Сообщения: 20
Зарегистрирован: 04.09.2007 16:55:14

Сообщение debi12345 » 06.09.2007 11:37:30

Все есть. Все фичи "egrep".
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re:

Сообщение Vlad-55 » 10.01.2010 21:51:45

debi12345 писал(а):
Attid писал(а):
Код: Выделить всё
regexpr

Слабоватый (хотя и компактный) модуль, самое страшное -не умеет работать с юникодом.
Поэтому пользуюсь 100% оснащенным TRegExpr с адресов http://anso.da.ru/ или http://anso.virtualave.net/


По указанным адресам ошибка 404. Нашел модуль здесь.
Для тех, кто рабоает под Linux необходимо:
Код: Выделить всё
uses
Windows;

Заменить, например, на это:
Код: Выделить всё
uses
{$IFDEF Linux}
Unix;
{$ENDIF}
{$IFDEF Win32}
Windows;
{$ENDIF}

Тогда модуль будет работать как надо
Vlad-55
незнакомец
 
Сообщения: 1
Зарегистрирован: 10.01.2010 21:41:15

Re: regexp

Сообщение v-t-l » 11.01.2010 10:44:03

Vlad-55 писал(а):По указанным адресам ошибка 404. Нашел модуль здесь.

С Lazarus'ом идет этот модуль, только называется synregexpr.pas в каталоге /lazarus/components/synedit/.

Добавлено спустя 5 минут 27 секунд:
http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/components/synedit/synregexpr.pas?root=lazarus&view=log
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: regexp

Сообщение Odyssey » 21.01.2010 00:34:47

А кто-нибудь в курсе, synregexpr работает с utf-8?
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: regexp

Сообщение dunin » 19.01.2011 16:04:43

Код: Выделить всё
uses
  synregexpr,
  ...
procedure TForm1.Button1Click(Sender:TObject);
   var RegExpr: TRegExpr;
      RegExprStr: string;
begin
  RegExprStr:='^ko(?:t|shka)'; // группировка без обратной связи
  //RegExprStr:='^ko(t|shka)'; // без группировки работает %(
  RegExpr:= tRegExpr.Create;
  RegExpr.Expression:= RegExprStr;
  if RegExpr.Exec('kot i koshka') // здесь валится
    then showmessage(
        'RegExpr.Expression = '+(RegExpr.Expression)+#13#13+
        'RegExpr.SubExprMatchCount = '+inttostr(RegExpr.SubExprMatchCount)+#13+
        'RegExpr.MatchPos[0] = '+inttostr(RegExpr.MatchPos[0])+#13+
        'RegExpr.MatchLen[0] = '+inttostr(RegExpr.MatchLen[0])+#13+
      '');
  FreeAndNil(RegExpr);
end;

111.jpg

Вопрос: что не так делаю? :|
Спасибо.

Добавлено спустя 20 часов 39 минут 8 секунд:
dunin писал(а):...
Вопрос: что не так делаю? :|
Спасибо.

Оказывается делаю все правильно. Получил ответ от автора юнита (Andrey V. Sorokin), надеюсь он не обидится, что открыто опубликую:
"...К сожалению, у меня так и не дошли руки реализовать конструкции (?..), после "?" можно указать только "модификаторы" (greedy, case insensitive etc), поэтому библиотека и сообщает, что не знает такого модификатора..."

Вопрос к сообществу: кто-нибудь знает альтернативные юниты/библиотеки для использования регулярных выражений?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: regexp

Сообщение Сквозняк » 21.01.2011 01:56:58

Вопрос к сообществу: кто-нибудь знает альтернативные юниты/библиотеки для использования регулярных выражений?

Берёшь и пишешь цикл который просеивает массив и находит любое нужное тебе выражение. Нет проблем с зависимостями, ищет что надо и как надо.
Сквозняк
энтузиаст
 
Сообщения: 1126
Зарегистрирован: 29.06.2006 22:08:32

Re: regexp

Сообщение Odyssey » 21.01.2011 12:50:38

Ещё есть обёртка PCRE для Delphi, но её придётся сначала портировать на FPC, и она потянет за собой динамическую библиотеку. И ещё лицензию на саму обёртку нужно уточнить. Но потенциально это полная поддержка perl-совместимых регулярных выражений.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: regexp

Сообщение dunin » 21.01.2011 23:16:54

Odyssey писал(а):Ещё есть обёртка PCRE для Delphi, но её придётся сначала портировать на FPC, и она потянет за собой динамическую библиотеку. И ещё лицензию на саму обёртку нужно уточнить. Но потенциально это полная поддержка perl-совместимых регулярных выражений.

Ага. Есть такое. Вот нарыл:
TPerlRegEx is a Delphi VCL wrapper around the open source PCRE library, which implements Perl-Compatible Regular Expressions.
The supplied pcrelib.dll contains PCRE 7.9, compiled with Unicode support.
The supplied OBJ files contain PCRE 7.9, compiled with Unicode support.

By default, the component uses the DLL. Using the OBJ files can trigger an internal compiler error, particularly when installing the component into a package. You can use the OBJ files by editing the compiler directives at the top of the pcre.pas file.

For more information about PCRE, please visit http://www.regular-expressions.info/pcre.html

For more information about regular expressions in general, please visit http://www.regular-expressions.info/

You can download the latest version of TPerlRegEx at http://www.regular-expressions.info/delphi.html

TPerlRegEx is licensed under the Mozilla Public License, version 1.1.

Очередной вопрос к сообществу: кто в этом понимает, в двух словах что за лицензия? Можно ли использовать бесплатно? на каких условиях?

Читаем далее:
To install this component into Delphi, open the .dpk file for your Delphi version, compile it, and install it into the IDE. The TPerlRegEx component will appear on the JGsoft page in the component palette.

Alternatively, you can create a new package or add the component to an existing package. Simply add the files PerlRegEx.pas and pcre.pas to the package.

If you prefer to instantiate TPerlRegEx at runtime instead of dropping it on a form, you don't need to install its package into the Delphi IDE. Simply add PerlRegEx to the uses clause of the units in which you want to use it. There's no need to add the pcre unit to the uses clause. This unit is used internally by TPerlRegEx.

Что и сделал. Закинул юниты поближе к проекту, добавил директиву {$MODE Delphi}{$H+} - отладчик почему-то матерится
Безимени-1.jpg

но при повторном нажатии F9 программа стартует. (В чем дело - сходу не фтыкаюсь. Что-нибудь похожее у кого было?) :?

Регулярные выражения работают. Вроде. Буду дальше разбираться... огорчило, что тянется библиотека, а она DLL, т.е. виндусовская... но нашел в коде такие вот строчки и немного повеселел.
Код: Выделить всё
const
  {$IFDEF MSWINDOWS}
  libpcremodulename = 'pcrelib.dll';
  {$ENDIF MSWINDOWS}
  {$IFDEF UNIX}
  libpcremodulename = 'libpcre.so.0';
  {$ENDIF UNIX}

Есть надежда, что и кроссплатформенно работать будет. Короче разбираюсь пока... :?

зы. Odyssey, спасибо за наводку! :wink:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 3

Рейтинг@Mail.ru