![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| klyaksa |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 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 - лож. Как это сделать? |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
| klyaksa |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 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. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
ну так измени выражение на другое, напрИмер: ^a([1-5]{1})$ и r.Exec(q) будет возвращать False ты хоть бы написал, что за библитеку или компоненты используешь или религия не позволяет? Если стандартную в DelphiXE, что вот: http://www.webdelphi.ru/2010/09/delphi-xe-...-vyrazheniyami/ |
|||
|
||||
| klyaksa |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 15.9.2005 Репутация: нет Всего: нет |
>> ты хоть бы написал, что за библитеку или компоненты используешь или религия не позволяет?
regexpstudio.com, хотя думал что по TRegExpr.Create понятно. параллельно сейчас пробую родную из XE ковырять (она на этом примере тоже так выдает). >>ну так измени выражение на другое Рег. выражение задается пользователем и вот пример который не совсем ожидаемо работает. Поэтому пытаюсь понять как проверить что полностью совпадет с рег. выражением. Это сообщение отредактировал(а) klyaksa - 8.7.2011, 14:04 |
|||
|
||||
| klyaksa |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 15.9.2005 Репутация: нет Всего: нет |
По идеи Math[0] <> '' значит совпало все... Но нет...
|
|||
|
||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
Выражение не должно давать истину! Входная строка какого типа - Ansi? Unicode? |
|||
|
||||
| klyaksa |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 15.9.2005 Репутация: нет Всего: нет |
Въехал. Выражение (кажется) было не корректно составлено, если ^a(([1-5]{1})|([6-7]{2})){1}$ то будет как ожидал (проверил и на Сорокина и на родной XE).
Кстати, что лучше для уникодных строк XE - библиотек Сорокина (там написано не оптимизировано для них) или встроенная в XE? |
|||
|
||||
| xkor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 8.1.2007 Где: Питер Репутация: 1 Всего: 4 |
||||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
не хуже, 100%. Сам пользуюсь, перешел с TRegExpr -------------------- There are always someone smarter than you... |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |