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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите с TRegExpr 
:(
    Опции темы
klyaksa
Дата 8.7.2011, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Нужно проверить совпадает ли тест с регулярным выражением.
r := TRegExpr.Create;
r.Expression := a;
if r.Exec(q) then дает истину при любых совпадениях.
Например, a = '^a([1-5]{1})|([6-7]{2})$', то при q = 'a7777' получаем истину (совпало ([6-7]{2}).
А хотелось бы чтобы только полное совпадение проверить, т.е. a77 - истина, а7777 - лож.
Как это сделать? 
PM MAIL   Вверх
Akella
Дата 8.7.2011, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Цитата(klyaksa @  8.7.2011,  09:35 Найти цитируемый пост)
проверить, т.е. a77 - истина, а7777 - лож.

Код
a\d{2}



так?
user posted image
PM MAIL   Вверх
klyaksa
Дата 8.7.2011, 10:36 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Не совсем. Нужно не рег. выражение изменить, а поправить код, чтобы верно срабатывал.
Допустим нужно узнать что текст состоит из буквы а и одной цифры из диапазона 1-5 или двух цифр из диапазона 6-7, т.е. рег. выражение: '^a([1-5]{1})|([6-7]{2})$'
Ввод а3, а5, а77 должны давать истину, а а33, а777 уже нет...

Причем после r.Exec(q) в r.Match[0] ожидаю получить текст, совпавший со всем патэрном, но там для а7777 находится 77.
PM MAIL   Вверх
Akella
Дата 8.7.2011, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Цитата(klyaksa @  8.7.2011,  10:36 Найти цитируемый пост)
Ввод а3, а5, а77 должны давать истину, а а33, а777 уже нет...

ну так измени выражение на другое, напрИмер: ^a([1-5]{1})$
и r.Exec(q) будет возвращать False

ты хоть бы написал, что  за библитеку или компоненты используешь или религия не позволяет?

Если стандартную в DelphiXE, что вот: http://www.webdelphi.ru/2010/09/delphi-xe-...-vyrazheniyami/
PM MAIL   Вверх
klyaksa
Дата 8.7.2011, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



>> ты хоть бы написал, что  за библитеку или компоненты используешь или религия не позволяет?
regexpstudio.com, хотя думал что по  TRegExpr.Create понятно.
параллельно сейчас пробую родную из XE ковырять (она на этом примере тоже так выдает).

>>ну так измени выражение на другое
Рег. выражение задается пользователем и вот пример который не совсем ожидаемо работает. Поэтому пытаюсь понять как проверить что полностью совпадет с рег. выражением.

Это сообщение отредактировал(а) klyaksa - 8.7.2011, 14:04
PM MAIL   Вверх
klyaksa
  Дата 8.7.2011, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



По идеи Math[0] <> '' значит совпало все... Но нет... 
PM MAIL   Вверх
cat512
Дата 8.7.2011, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Например, a = '^a([1-5]{1})|([6-7]{2})$', то при q = 'a7777' получаем истину (совпало ([6-7]{2}).

Выражение не должно давать истину! Входная строка какого типа - Ansi? Unicode?
PM MAIL   Вверх
klyaksa
Дата 8.7.2011, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Въехал. Выражение (кажется) было не корректно составлено, если ^a(([1-5]{1})|([6-7]{2})){1}$ то будет как ожидал (проверил и на Сорокина и на родной XE).

Кстати, что лучше для уникодных строк XE - библиотек Сорокина (там написано не оптимизировано для них) или встроенная в XE?


PM MAIL   Вверх
xkor
Дата 9.7.2011, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(klyaksa @  8.7.2011,  15:59 Найти цитируемый пост)
Кстати, что лучше для уникодных строк XE - библиотек Сорокина (там написано не оптимизировано для них) или встроенная в XE?

учитывая что встроенная это обертка к замечательной и популярной библиотеке PCRE, думаю что она как минимум не хуже.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
MetalFan
Дата 11.7.2011, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(xkor @  9.7.2011,  00:33 Найти цитируемый пост)
она как минимум не хуже

не хуже, 100%. Сам пользуюсь, перешел с TRegExpr



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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