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