Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные выражения - нужна помощь, разъясните ламеру 
:(
    Опции темы
Alexeis
Дата 20.9.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Экранирует обратный слэш  "\" записанный перед метасимволом.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
NibiluK
Дата 20.9.2006, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 12.7.2006
Где: Москва

Репутация: нет
Всего: нет



Цитата(alexeis1 @  20.9.2006,  17:43 Найти цитируемый пост)
Экранирует обратный слэш  "\" записанный перед метасимволом. 

Не получается....
PM MAIL   Вверх
Alexeis
Дата 20.9.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Можно глянуть на то выражение, которое не получается. Я специально проверял перед тем как писать.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
NibiluK
Дата 20.9.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 12.7.2006
Где: Москва

Репутация: нет
Всего: нет



Например: "^\Z"
PM MAIL   Вверх
Alexeis
Дата 20.9.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Так Z это же обычный символ.
Вот можно проробовать на таком тексте
Цитата

gaeraent
wae
arw
aentm weat
wae
tnweatZnwea
t
nwetwZa\etwe
tnw
etwaentwaet


и регулярное выражение "\\" (первый слэш экранирует второй)
тогда как "\" - вызовет ошибку. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
NibiluK
Дата 20.9.2006, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 12.7.2006
Где: Москва

Репутация: нет
Всего: нет



на запрос "\\", как в одиночу так и с метасимволами, ничего не находится. Этот код, который я привёл, ищет точное соответствие. Так что, никак регэкспы в него не впихнуть?
PM MAIL   Вверх
Alexeis
Дата 21.9.2006, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(NibiluK @  20.9.2006,  21:21 Найти цитируемый пост)
на запрос "\\", как в одиночу так и с метасимволами, ничего не находится
 Значит, что-то в коде не верно, этот вариант я проверял.


Цитата(NibiluK @  20.9.2006,  20:44 Найти цитируемый пост)
 "^\Z" 
 если нужно найти выражение в точноти соответствющее указаной записи, то для получения правильного регулярного выражения экранируя символы получим "\^\\Z".



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Cosmologist
Дата 21.9.2006, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.8.2006

Репутация: нет
Всего: 0



А кто нить видел русскую документацию по RegExpr, а то с английским траблы.
PM MAIL   Вверх
Alexeis
Дата 21.9.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



У меня есть. Там в комплекте шла русская и болгарская.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
NibiluK
Дата 22.9.2006, 06:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 12.7.2006
Где: Москва

Репутация: нет
Всего: нет



Цитата(alexeis1 @  21.9.2006,  01:27 Найти цитируемый пост)
 Значит, что-то в коде не верно, этот вариант я проверял.

А на чём проверял-то?
Цитата(alexeis1 @  21.9.2006,  01:27 Найти цитируемый пост)
если нужно найти выражение в точноти соответствющее 

С поиском в точности такого выражения проблем нет - нужно искать слова и строки, начинающиеся чем-то и кончающиеся чем-то.

Добавлено @ 06:18 
Ладно, если уж с тем кодом ничего нельзя сделать путного, то тогда попробуем покурочить демо-программку к TRegExpr
Код
unit TRegExprClassMain;

{

  Демо-пример использования TRegExpr

  Использование класса TRegExpr, т.е. самый правильный
  способ использования.

}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls;

type
  TfmTRegExprClassMain = class(TForm)
    btnExtractEmails: TBitBtn;
    memExtractEmails: TMemo;
    lbxEMailesExtracted: TListBox;
    lblSearchPhoneIn: TLabel;
    memSearchPhoneIn: TMemo;
    Bevel1: TBevel;
    lblSubstituteTemplate: TLabel;
    memSubstituteTemplate: TMemo;
    btnSubstitutePhone: TBitBtn;
    memSubstitutePhoneRes: TMemo;
    procedure btnExtractEmailsClick(Sender: TObject);
    procedure btnSubstitutePhoneClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fmTRegExprClassMain: TfmTRegExprClassMain;

implementation

uses RegExpr;
{$R *.DFM}

// Эта простенькая функция извлечет все e-mail адреса из входной строки
// и поместит их в результирующую строку в формате CSV (comma separated values)
function ExtractEmails (const AInputString : string) : string;

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

 const
  EmailRE = '[_a-zA-Z\d\-\.]+@[_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+';
 var
  r : TRegExpr;
 begin
  Result := '';

  r := TRegExpr.Create;
  // Создание объекта - не забывайте об этом, 10% писем ко мне
  // связаны с тем, что объект начинают использьвать, не создав его.

  try // гарантирует освобождение занятой объектом памяти
     r.Expression := EmailRE;
    // Присваиваем исходный текст регулярного выражения.
    // При первой же необходимости (например, при вызове метода Exec)
    // оно будет откомпилировано. Если в выражении есть ошибки, то 
    // будет вызвано исключение
     if r.Exec (AInputString) then
      REPEAT
       Result := Result + r.Match [0] + ',';
      UNTIL not r.ExecNext;
    finally r.Free;
   end;
 end;

procedure TfmTRegExprClassMain.btnExtractEmailsClick(Sender: TObject);
 begin
  lbxEMailesExtracted.Items.CommaText := ExtractEmails (memExtractEmails.Text);
 end;

// В этом примере мы извлечем телефонный номер из входной строки,
// разделим его на составляющие (код страны, код города, внутренний номер телефона).
// Затем подставим все это в шаблон.
function ParsePhone (const AInputString, ATemplate : string) : string;
 const
  IntPhoneRE = '(\+\d *)?(\(\d+\) *)?\d+(-\d*)*';
 var
  r : TRegExpr;
 begin
  r := TRegExpr.Create; 
  // Создание объекта - не забывайте об этом, 10% писем ко мне
  // связаны с тем, что объект начинают использьвать, не создав его.

  try // гарантирует освобождение занятой объектом памяти
     r.Expression := IntPhoneRE;
    // Присваиваем исходный текст регулярного выражения.
    // При первой же необходимости (например, при вызове метода Exec)
    // оно будет откомпилировано. Если в выражении есть ошибки, то 
    // будет вызвано исключение
     if r.Exec (AInputString)
      then Result := r.Substitute (ATemplate)
      else Result := '';
    finally r.Free;
   end;
 end;

procedure TfmTRegExprClassMain.btnSubstitutePhoneClick(Sender: TObject);
 begin
  memSubstitutePhoneRes.Text := ParsePhone (memSearchPhoneIn.Text, memSubstituteTemplate.Text);
 end;

end.


Нужно чтобы вот это 
Код
EmailRE = '[_a-zA-Z\d\-\.]+@[_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+';
 можно было менять из отдельного поля Edit или Memo
PM MAIL   Вверх
Alexeis
Дата 22.9.2006, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(NibiluK @  22.9.2006,  06:03 Найти цитируемый пост)
Нужно чтобы вот это 
Выделить всёкод Pascal/Delphi
1: EmailRE = '[_a-zA-Z\d\-\.]+@[_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+';
 можно было менять из отдельного поля Edit или Memo 


без проблем,  вместо
r.Expression := EmailRE;

написать

r.Expression := Edit1.text;


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.