Можно ли проверить регулярное выражение, чтобы увидеть, сводится ли оно к. *

я разрабатываю приложение, в котором пользователи вводят регулярное выражение в качестве критерия фильтрации, однако я не хочу, чтобы люди (легко) могли вводить . * (т.е. совпадать с чем угодно). Проблема в том, что если я просто использую if (expression == ". *") , то это можно легко обойти, введя что-то вроде . *. * .

Кто-нибудь знает о тесте, который мог бы взять кусок регулярного выражения и проверить, является ли он по существу . * , но в несколько более сложной форме?

Мои мысли:

  1. Я мог бы видеть если выражение является одним или несколькими повторениями . * , (т.е. если оно соответствует (\. \ *) + (кавычки / экранирования могут быть не совсем точными, но вы получите Проблема заключается в том, что могут быть другие формы записи глобального совпадения (например, с $ и ^ ), которые слишком исчерпывающие, чтобы даже думать о них заранее, не говоря уже о test.

  2. Я мог бы протестировать с его помощью несколько случайно сгенерированных строк и предположить, что, если все они пройдут, пользователь ввел глобально соответствующий шаблон. Проблема с этим подходом состоит в том, что могут возникнуть ситуации, когда выражение достаточно плотное и Я просто выбираю плохие строки, чтобы сопоставить их.

Кто-нибудь думает?

(К вашему сведению, приложение написано на Java, но я предполагаю, что это скорее алгоритм, чем вопрос для конкретного языка.)

10
задан Josh Caswell 20 November 2011 в 21:49
поделиться