Сценарий
Мне нужно сравнить шаблон регулярного выражения с массивом символов (char[]
). Мне не разрешено приводить массив символов в строку из соображений безопасности. Метод Pattern.matches () Java предназначен для получения шаблона и строки. Кроме того, шаблон регулярного выражения передается мне из другого источника и будет меняться (не является постоянным).
Это не работает:
// This pattern comes from another source, that I do not control. It may change.
String pattern = "^(.)\\1+$";
char[] exampleArray = new char[4];
exampleArray[0] = 'b';
exampleArray[1] = 'l';
exampleArray[2] = 'a';
exampleArray[3] = 'h';
// This should return true, for this pattern, but I cannot pass in a char[].
boolean matches = Pattern.matches(pattern, exampleArray);
Мысли
I попытался деконструировать шаблон регулярного выражения и проверить массив для каждой части шаблона, но условный лог c, требуемый для интерпретации каждой части шаблона, помешал мне. Например: предположим, что шаблон содержит что-то вроде "(.){5,10}"
. Тогда мне нужно только проверить длину char[]
. Однако, если он содержит "^B(.){5,10}X"
, мне нужно сделать что-то совсем другое. Кажется, что существует слишком много возможностей для эффективной деконструкции шаблона регулярного выражения и учета каждой возможности (именно поэтому я всегда просто использовал Pattern.matches()
).
Вопрос
Что было бы наиболее эффективным способом проверки шаблона регулярного выражения для массива символов без приведения массива символов к строке или создания строки?