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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные выражения в Delphi 
:(
    Опции темы
kemiisto
  Дата 27.10.2008, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Akella, имелось ввиду PCRE-based Components for Delphi for Windows/Win32 (чуть ниже, того что ты привёл). Будет время посмотрю как там работа организована.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
WaReZMEN
Дата 13.1.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

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



Статья супер все простые варианты я понял и активно заюзал но столкнулся со сложным вариантом помогите разобраться пожалуйста
вот текст
ABC := 'dsfdfdsf'  Хочу получить только слово ABC
ABC.ABC := 'dsfdfdsf'   Ничего не получу потому как есть "."
ABC :Integer; ничего не берем

ну естественно пробелы до ABC куча может быть и после тоже... а также под ABC понимается некоторое слово на латинице....
PM MAIL ICQ   Вверх
kemiisto
Дата 13.1.2009, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



WaReZMEN, может я что не так понял в постановке задачи, но не вижу ничего сложного. Регулярное выражение ([a-zA-Z]+) :=, нужное слово будет в RegExp.Match[1].

Цитата(WaReZMEN @  13.1.2009,  15:44 Найти цитируемый пост)
а также под ABC понимается некоторое слово на латинице.... 

А может всё-таки не только слово, нои любой идентификатор? Уточните задачу.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
WaReZMEN
Дата 13.1.2009, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

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



там может быть не только латинское слово также и цифры и прочая лабуда но интересует чтоб не было точки (SDF.ABC) и после не ABC должно быть :=
P.S. если строчка будет вида ABC := 'fdsfdsf'; FGHJ.DFR1 :='dfdgdfg';  то все равно берем ABC если б во второй части (FGHJ.DFR1 :='dfdgdfg') не было точки, а было бы  DFR1 :='dfdgdfg' мы бы еще получили и DFR1. 

Это сообщение отредактировал(а) WaReZMEN - 13.1.2009, 20:00
PM MAIL ICQ   Вверх
source777
Дата 13.1.2009, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

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



Цитата(kemiisto @  13.1.2009,  18:17 Найти цитируемый пост)
Регулярное выражение ([a-zA-Z]+) :=

тогда уж, \b([a-zA-Z]+)\s*:=
т.к. 
Цитата(WaReZMEN @  13.1.2009,  17:44 Найти цитируемый пост)
пробелы до ABC куча может быть и после тоже... 

Кроме того, можно долго спорить о том, как может выглядеть слово на латинице, оно отнюдь не ограничено одними буквами, в случае идентификаторов всё проще, они однозначно детерминируются синтаксисом конкретного языка программирования.



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
WaReZMEN
Дата 13.1.2009, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

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



язык паскаль мне нужно из кода выделить только переменые проблема в том что они в var не объявлены а просто в коде попадаются типа как в байсике де хачу там пишу... И равно не нужно выносить...

Добавлено через 9 минут и 19 секунд
source777, если как ты говориш
Цитата(source777 @  14.1.2009,  03:58 Найти цитируемый пост)
тогда уж, \b([a-zA-Z]+)\s*:=

то 
при такой  ABC := 'fdsfdsf'; FGHJ.DFR :='dfdgdfg'; строке получится  и ABC и  DFR а далжно получится только ABC потому что у DFR в начале стоит точка. Чуть не забыл если точка не слитно со словом то оно считается без точки (FGHJ. DFR :='dfdgdfg' мы получим DFR).

Это сообщение отредактировал(а) WaReZMEN - 13.1.2009, 20:08
PM MAIL ICQ   Вверх
source777
Дата 13.1.2009, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

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



(\s|^)([a-zA-Z]+)\s*:=, нужное слово будет в RegExp.Match[2].




--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
WaReZMEN
Дата 13.1.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

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



О спасибо!!! а можно расшифровать и пояснить почему RegExp.Match[2]?
PM MAIL ICQ   Вверх
source777
Дата 13.1.2009, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

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



Да, на здоровье.
RegExp.Match[2] потому, что нужное тебе слово находится внутри второй пары круглых скобок в регулярке.
А расшифровка примерно такая:
(пробельный символ или начало строки)(один или более символов из набора латинских букв) любое_число_пробельных_символов :=


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
WaReZMEN
Дата 15.1.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

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



Снова к вам smile 
На этот раз хочу получить значение между скобками [ ]
делаю так \[(.*)\] в результате получаю все но мне нужно те значения из скобок  которые содержат a-zA-Z а также _ " . 
делаю так \[([a-zA-Z0-9_"\.]+)\] подскажите где ошибка?
P.S. точек и "_" может быть от 1-~ а вот кавычки " только 2

Добавлено через 7 минут и 38 секунд
Вот строка для теста
Итого: [round([SUMM]*100)/100] [OrdGridsDM.IBtblOrders."ORD_CURRENCY"][txt] 

должно получится [OrdGridsDM.IBtblOrders."ORD_CURRENCY"]
PM MAIL ICQ   Вверх
source777
Дата 15.1.2009, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

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



Давай-ка ты будешь яснее объяснять что нужно... 
А именно:
1) пример текста
2) твоё регулярное выражение
3) найденные им совпадения
4) совпадения, которые регэксп должен был бы найти

Пример:
1) 
Цитата

Проверка  [Java] [_".NET"]...

2) \[([a-zA-Z0-9_".]+)\]
3) 
[Java]
[_".NET"]
4) 
[Java]
[_".NET"]

Добавлено через 2 минуты и 18 секунд
Цитата(WaReZMEN @  15.1.2009,  17:44 Найти цитируемый пост)
Вот строка для теста
Итого: [round([SUMM]*100)/100] [OrdGridsDM.IBtblOrders."ORD_CURRENCY"][txt] 

должно получится [OrdGridsDM.IBtblOrders."ORD_CURRENCY"] 

Почему?
Должно получится:
[SUMM]
[OrdGridsDM.IBtblOrders."ORD_CURRENCY"]
[txt] 

либо ты плохо объяснил, что тебе нужно...

Добавлено через 6 минут и 37 секунд
Вообще по описанию похоже, что ищется такое выражение: \[([\w.]*("[\w.]+")?[\w.]*)\]


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
WaReZMEN
Дата 15.1.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

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



Вы правы я не совсем точно сказал...
в строке обязательно будут a-zA-Z " .  а вот  0-9 и  _ не обязательно но могут.
PM MAIL ICQ   Вверх
source777
Дата 16.1.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

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



Тогда так: \[([\w.]*"[\w.]+"[\w.]*)\] 
Эта регулярка найдёт выражение в квадратных скобках, если оно содержит две и только две двойных кавычки, внутри и снаружи которых могут быть латинские буквы, цифры, точки и знаки подчёркивания, кроме того внутри двойных кавычек должен быть хотя бы 1 символ...

P.S. Не отклоняйся от предложенного формата описания того, что нужно, поверь, он нагляднее любых слов.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
WaReZMEN
Дата 16.1.2009, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

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



source777, и снова спасибо!!! Я все думал как вы все это помните... а щас нашел редактор стало легче и понятнее спасибо еще раз огромное.

Цитата(source777 @  16.1.2009,  21:22 Найти цитируемый пост)
P.S. Не отклоняйся от предложенного формата описания того, что нужно, поверь, он нагляднее любых слов. 

что то я не понял  smile 
PM MAIL ICQ   Вверх
source777
Дата 16.1.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

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



Цитата(WaReZMEN @  16.1.2009,  13:31 Найти цитируемый пост)
что то я не понял  smile  

Это общий совет на будущее, когда спрашиваешь про регулярные выражения, описывай проблему в формате
1) пример текста
2) твоё регулярное выражение
3) найденные им совпадения
4) совпадения, которые регэксп должен был бы найти

так тебя быстрее поймут, да и ответить правильно будет проще, т.к. появляется чёткий и однозначный критерий правильности: п.3 совпадает с п.4. smile 


Цитата(WaReZMEN @  16.1.2009,  13:31 Найти цитируемый пост)
Я все думал как вы все это помните... а щас нашел редактор стало легче и понятнее 
а зачем нужен редактор? валидатора вполне достаточно, есть куча он-лайн валидаторов - см. тут, очень удобно smile 

P.S. ты ещё рекурсивных регэкспов не встречал, вот там реальная жесть smile 


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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