На сколько я понял из диалога следует, что как я сказал, создаётся ассоциированный массив и ищется в нём. Если просмотреть все варианты, то если регулярных выражений много то не выгодно их всех компилировать при старте, многие из которых могут просто не использованы за сессию работы. Если бы кешировалась последняя использованная, то при двух регулярных выражениях в цикле было бы больше проблем, так как компиляция бы всё равно потребовалась но добавилась бы проверка кеша на совпадение с текущим. Если динамический массив, то есть по мере обработки наболнялся, то получше но всё равно к моментуу задействования всех тратилось бы время на проверку, а при условии чтения регулярного выражения с GUI наполнялось бы множеством ненужных. Из этого вывод лучший вариант - компилирование регулярного выражения. Допустим проблема создания нового типа объекта. Но тоже можно решить как с таймером или файловым дескриптором, ведь фактически возвращается номер объекта ссылающегося на сам объект. То есть путь объект храниться в интерпретаторе а наружу выдаёт его номер в массиве. Сохраняем номер в переменную и используем его в функции регулярного выражения. Тут проблема что функция воспримет номер не как объект, а как регулярное выражение Ны для файловых функций номер ясно не может восприниматься как путь и однозначно определяется, а для функций рег. выр. можно предложить автору подумать, каким объектом его обозначить, чтобы перед использованием проверить тип и в случае определённого конвертировать не в строку, а взять объект.