Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как проверить pattern регулярного выражения? / 16 сообщений из 16, страница 1 из 1
11.09.2021, 09:16
    #40096838
m52
m52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
Здравствуйте,

Использую TRegEx.IsMatch из модуля System.RegularExpressions для проверки соответствия строки текста некоторому регулярному выражению (паттерну).

Но как проверить сам pattern регулярного выражения, правильно ли он составлен?

Например, если я проверяю
Код: pascal
1.
if TRegEx.IsMatch('Рыбалка.mp4','*.jpg') then ...


то во время выполнения такой проверки я получу исключение ERegularExpressionError: Error in regular expression at offset 0: nothing to repeat. что очень неприятно.

Поэтому до проверки if я хочу проверить, правильно ли вообще составлен шаблон рег.выражения. Искал что-то вроде ф-ции IsPatternValid или CheckPattern, но не нашел. Подскажите, есть ли способ проверить правильность составления регулярного выраждения?

Заранее благодарен.
...
Рейтинг: 0 / 0
11.09.2021, 10:16
    #40096840
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
Неправильно, совсем :)
Я думаю Вам необходимо почитать про регулярные выражения
...
Рейтинг: 0 / 0
11.09.2021, 10:17
    #40096841
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
Проверить можно тут https://regex101.com/
...
Рейтинг: 0 / 0
11.09.2021, 11:13
    #40096845
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
m52
то во время выполнения такой проверки я получу исключение ERegularExpressionError: Error in regular expression at offset 0: nothing to repeat. что очень неприятно.

Ну так в чём проблема то? Оберни if в try - except и в случае ERegularExpressionError делай что ты хочешь делать при неправильном паттерне.
...
Рейтинг: 0 / 0
11.09.2021, 12:16
    #40096846
m52
m52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
Я так и сделал, ловлю Exception, но проблема в том, что возбуждения исключения сильно замедляет проверку каждого файла.
Ладно, тема уже не актуальна для меня, нашел обходной путь.
...
Рейтинг: 0 / 0
11.09.2021, 12:19
    #40096847
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
m52возбуждения исключения сильно замедляет проверку каждого файла.

А зачем ты проверяешь остальные файлы после первого, вызвавшего исключение? Это
совершенно бессмысленно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.09.2021, 16:09
    #40096869
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
m52
Я так и сделал, ловлю Exception, но проблема в том, что возбуждения исключения сильно замедляет проверку каждого файла.
Ладно, тема уже не актуальна для меня, нашел обходной путь.

Т.е., у тебя обработка исключений медленнее, чем работа с файлами?
...
Рейтинг: 0 / 0
11.09.2021, 17:59
    #40096883
Softologic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
Смотрите мою тему, может поможет:
https://www.sql.ru/forum/1327941/strannosti-regulyarnyh-vyrazheniy

Там еще ссылка на сайт-валидатор есть:
https://regexr.com/
...
Рейтинг: 0 / 0
11.09.2021, 18:21
    #40096892
m52
m52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
У меня программа сканирует каталоги с файлами, где файлов порядка 67 шт. Если рег.выражение написано с ошибкой, то на каждый файл вызывается исключение в RegEx, т.е. 67 раз и тогда время сканирования файлов ~2 сек, в то время как если не вызываются исключения, то пробежка по файлам занимает 0 сек.

Внешние чужие сайты-валидаторы не интересуют, разумеется. Это понятно, что завязка на сторонний сайт (сервис) - это очень-очень плохо.
...
Рейтинг: 0 / 0
11.09.2021, 18:40
    #40096895
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
m52
У меня программа сканирует каталоги с файлами, где файлов порядка 67 шт. Если рег.выражение написано с ошибкой, то на каждый файл вызывается исключение в RegEx

Ну так объясни, зачем после первого исключения ты повторяешь заведомо невыполнимую операцию ещё 66 раз?
...
Рейтинг: 0 / 0
11.09.2021, 18:43
    #40096896
Softologic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
m52

Внешние чужие сайты-валидаторы не интересуют, разумеется. Это понятно, что завязка на сторонний сайт (сервис) - это очень-очень плохо.

Как раз таки, ссылку на сайт-валидатор я вам с иной целью дал. Чтобы потренироваться на нем и понять как работают регулярные выражения, а не с целью привязки программы к нему. Посмотрите мой топик, я ведь с похожей задачей там вопрошал - "Но как проверить сам pattern регулярного выражения, правильно ли он составлен?".
...
Рейтинг: 0 / 0
11.09.2021, 18:55
    #40096900
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
m52
У меня программа сканирует каталоги с файлами, где файлов порядка 67 шт. Если рег.выражение написано с ошибкой, то на каждый файл вызывается исключение в RegEx, т.е. 67 раз и тогда время сканирования файлов ~2 сек, в то время как если не вызываются исключения, то пробежка по файлам занимает 0 сек.
...

Т.е., обработка исключения занимает 2/67 сек?
Да у тебя тебя просто код кривой.
...
Рейтинг: 0 / 0
11.09.2021, 18:59
    #40096901
m52
m52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
А вы видели мой код?
Да нет никакого кода, я просто зажал try-except-end и всё.
Код: pascal
1.
2.
3.
4.
try
  if TRegEx.IsMatch('Рыбалка.mp4','*.jpg') then ...
except
end.


Выполните это 67 раз и почувствуйте задержку.
...
Рейтинг: 0 / 0
11.09.2021, 19:00
    #40096902
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
softwarerзачем после первого исключения ты повторяешь заведомо невыполнимую операцию ещё
66 раз?

Он надеется, что настойчивость сотворит чудо и кривая регулярка починится сама
собой. "Камень воду точит", "если долго сидеть у реки" и всё такое...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.09.2021, 21:34
    #40096922
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
try
  for i := 0 to Files.Count - 1 do begin
    if TRegEx.IsMatch(Files[i], '*.jpg') then begin
      ............
    end;
  end;
except
  on E: ERegularExpressionError do
    ShowException(E);
end;


А еще можно так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
LRegEx := TRegEx.Create('*.jpg');
try
  for i := 0 to Files.Count - 1 do begin
    if LRegEx.Match(Files[i]).Success then begin
      ............
    end;
  end;
finally
  LRegEx.Free;
end;
...
Рейтинг: 0 / 0
12.09.2021, 00:52
    #40096936
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить pattern регулярного выражения?
m52
Выполните это 67 раз и почувствуйте задержку.

Вот именно поэтому за конструкцию
Код: pascal
1.
2.
except
end;

предлагается бить, иногда даже ногами.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как проверить pattern регулярного выражения? / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]