Как искать шаблоны в произвольных последовательностях?

Regex используется только в строке, но что, если эта функциональность может быть расширена не только на символ, но и на объекты или даже дальше на функции? Предположим, что наши объекты будут целыми числами, они могут быть в любом порядке:

1 2 3 4 5 6 7 8 9 10 11 12 13

И задача, которую вы хотите решить, это найтипростые пары (или аналогичная задача поиска по шаблону) вот так:

{prime}{anyNumber}{prime}

Так что ответ таков:

(3,4,5) (5,6,7) (11,12,13)

Или немного более сложный пример для цепочки простых чисел:

{prime}({anyNumber}{prime})+

Ответ:

(3,(4,5),(6,7)) (11,(12,13))

Очень похоже на работу Regex, верно?

Что происходит, что вы определяете некоторую функцию с именемIsPrime (х) и использовать его, когда вам нужно проверить, является ли следующий элемент ввода действительно простым (так что это своего рода равенство объекту или пространству объекта)

Что я создал до сих пор

я создалObjectRegex класс похож наRegex класс в C #. Он принимает шаблоны, указанные выше, и выполняет связанный с ним предикат для идентификации объекта. Он прекрасно работает, но проблема в том, что он работает с любой последовательностью типаTValue следует преобразовать встрока прежде чем он будет передан в шаблон Regex и для этого я должен применить ВСЕ предикаты ко всей последовательности. O (n * m) плохая идея в конце концов ....

Я решил обойти это трудным путем и .... попытаться унаследовать строку, которая запечатана и наследование запрещено. От этого унаследованного класса требуется переопределение доступа

char this[int index] {get;}

в пользу отложенного выполнения предикатов до момента, когда это действительно имеет смысл.

Итак, есть идеи, как это сделать? Я люблю .NET Regex и его синтаксис, есть ли способ обойти это строковое проклятие и обмануть движок? Отражение может быть или какой-то хардкор я не знаю?

Обновление 1

Я нашел эту статьюhttp://www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-time и думаю, что это можно сделать путем замены этого метода [int index] моим кодом, но я думаю, что это повредит все остальное, потому что вы просто не можете заменить метод только для одного экземпляра.

Ответы на вопрос(1)

Ваш ответ на вопрос