Я использую Haskell, и мне кажется, что я не могу найти пакет REGEX, который поддерживает именованные группы, поэтому мне нужно как-то реализовать его самостоятельно.
в основном пользователь моего API использовал бы регулярное выражение с именованными группами, чтобы вернуть захваченные группы на карту
так
/(?P<name>[a-z]*)/hhhh/(?P<surname>[a-z]*)/jjj on /foo/hhhh/bar/jjj
даст
[("name","foo"),("surname","bar")]
Я делаю тривиальную реализацию спецификации с относительно небольшими строками, поэтому на данный момент производительность не является главной проблемой.
Чтобы решить эту проблему, я решил написать мета-регулярное выражение, которое будет применяться к регулярному выражению пользователя
/(?P<name>[a-z]*)/hhhh/(?P<surname>[a-z]*)/jjj
чтобы извлечь имена групп и заменить их ничем, чтобы получить
0 -> name
1 -> surname
и регулярное выражение становится
/([a-z]*)/hhhh/([a-z]*)/jjj
затем примените его к строке и используйте индекс для группировки имен с совпадающими.
Два вопроса:
- это кажется хорошей идеей?
- что такое мета-регулярное выражение, которое мне нужно захватить и заменить синтаксис именованных групп
для незнакомых с именованными группами http://www.regular -expressions.info / named.html
примечание: все, что мне нужно от именованных групп, - это чтобы пользователь давал имена совпадениям, поэтому подмножество именованных групп, которое только дает мне это, нормально