powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как проверить pattern регулярного выражения?
16 сообщений из 16, страница 1 из 1
Как проверить pattern регулярного выражения?
    #40096838
m52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

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

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

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

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

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

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

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

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

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

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


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

Он надеется, что настойчивость сотворит чудо и кривая регулярка починится сама
собой. "Камень воду точит", "если долго сидеть у реки" и всё такое...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как проверить pattern регулярного выражения?
    #40096922
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Как проверить pattern регулярного выражения?
    #40096936
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m52
Выполните это 67 раз и почувствуйте задержку.

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

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


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