Какой лучший способ хранить строки регулярных выражений в Haskell? - PullRequest
4 голосов
/ 17 октября 2011

У меня есть функция remove, которая принимает регулярное выражение в качестве строки и другую строку. Он удаляет все, что соответствует регулярному выражению из второй строки и возвращает его.

В данный момент я вызываю функцию remove с литеральными строками регулярных выражений, например:

remove "(my|a)?string" "Test string" -- returns "Test "

Эта программа будет расширяться, и в ней будет много регулярных выражений, и каждый из них может использоваться несколько раз по всей программе. Должен ли я хранить их так:

myregex = "(my|a)?string"

или я должен делать тип данных или что-то еще?

Спасибо

Ответы [ 2 ]

5 голосов
/ 17 октября 2011

Один из вариантов - использовать частичное приложение, как в:

remove regex str = <generic code to remove the regex expression from string>

Для каждого конкретного типа регулярного выражения, которое вы хотите применить, вы можете написать такую ​​функцию, как:

removeName = remove "<name_regex>"

и так далее.Тогда вы можете использовать такие функции, как

removeName "myname"
4 голосов
/ 17 октября 2011

Если производительность является проблемой, любое регулярное выражение, которое вы собираетесь использовать несколько раз, должно быть скомпилировано один раз и сохранено в скомпилированной форме. См. Также документацию для makeRegex .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...