Я делал что-то подобное раньше, хотя мне пришлось написать собственный движок для этого. В ASCII (или в Юникоде, или в любом другом наборе символов) нет ничего волшебного, и когда в школе учат регулярным выражениям , они обычно используют крошечный набор произвольных символов (например, Σ = {a, b}) для сохранения все просто. Алгоритмы все еще работают одинаково.
Большинство функций движков регулярных выражений в стиле Perl относятся только к персонажам. Некоторые функции, такие как ^
и $
, по-прежнему работают нормально. Некоторые как [:alnum:]
не имеют никакого смысла вообще. И другие, такие как [3-5]
, могут быть адаптированы для работы с не символьными строками.
Один хитрый момент (уже отмеченный полигенными смазочными материалами и другими) заключается в том, что регулярные выражения Perl работают хорошо, потому что то, что вы используете для описания языка, и то, что вы сопоставляете, - это обе строки символов - синтаксис не ' почти не работает для алфавитов без символьных строк. Так что /[3-5]/
в символах, возможно, должно быть [3,4,5]
(список целых чисел), и поэтому вам нужно строить язык из выражений, а не из строк (если вы не хотите писать свой собственный анализатор!).
Почему большинство библиотек регулярных выражений не являются общими для алфавита? Beats me - это чрезвычайно полезный инструмент, и кажется ужасной тратой применять его только к строкам персонажей. LINQ хорош, но я не уверен, как это могло бы помочь здесь.