Я разрабатываю приложение, в котором пользователи вводят регулярное выражение в качестве критерия фильтра, однако я не хочу, чтобы люди (легко) могли вводить .*
(т.е. соответствовать чему-либо). Проблема в том, что если я просто использую if (expression == ".*")
, тогда это можно легко обойти, введя что-то вроде .*.*
.
Кто-нибудь знает тест, который может взять кусок регулярного выражения и посмотреть, есть ли в основном .*
, но в несколько более сложной форме?
Мои мысли:
-
Я мог видеть, является ли выражение одним или несколькими повторениями
.*
(т.е. если оно соответствует(\.\*)+
(цитаты/экраны могут быть не совсем точными, но вы получаете идею). это может быть и другие формы написания глобального соответствия (например, с$
и^
), которые являются слишком исчерпывающими, чтобы даже думать о начале, сдавать тест. -
Я мог бы протестировать с ним несколько случайно сгенерированных строк и предположить, что если все они пройдут, пользователь ввел глобально соответствующий шаблон. Проблема с этим подходом заключается в том, что могут быть ситуации, когда выражение достаточно плотно, и я просто выбираю плохие строки для соответствия.
Мысли, кто-нибудь?
(FYI, приложение находится на Java, но я думаю, что это скорее алгоритмический вопрос, чем один для определенного языка.)