Звучит так, будто вы запрашиваете функцию, которая принимает регулярное выражение в качестве аргумента и возвращает набор символов, которые могут совпадать с заданным смещением, в строку для сопоставления:
Set<Character> getSymbols(String regEx, int offset);
Это нетривиально.
Используя ваш пример:
getSymbols("[az]\\:[A-Z]*", 1)
должен вернуть ['a', 'z'],
getSymbols("[az]\\:[A-Z]*", 2)
должен вернуть [':'],
getSymbols("[az]\\:[A-Z]*", 3)
должен вернуть ['A', 'B', 'C', ..... 'Y', 'Z']
Но это тривиальный ввод. Что если ввод был:
getSymbols("[abc]*FRED[xzy]*", 5)
Теперь вам нужно учесть тот факт, что любое количество символов «abc» может продолжаться по FRED и сместит все остальное, что приведет к результирующему набору, подобному следующему:
1: ['a', 'b', 'c', 'F']
2: ['a', 'b', 'c', 'F', 'R']
3: ['a', 'b', 'c', 'F', 'R', 'E']
4: ['a', 'b', 'c', 'F', 'R', 'E', 'D']
5: ['a', 'b', 'c', 'x', 'y', 'z', 'F', 'R', 'E', 'D']
Коду, который решает, который должен анализировать регулярные выражения, который имеет большую выразительность со всеми управляющими символами (\ w для пробела и т. Д.), Затем требуется рекурсивный алгоритм для построения выходного набора. *
Если это то, что вы намереваетесь, то следующий вопрос: «Какую проблему вы действительно пытаетесь решить?»