Я переношу библиотеку с Ruby на Go и только что обнаружил, что регулярные выражения в Ruby не совместимы с Go (google RE2). Мне пришло в голову, что Ruby и Java (плюс другие языки используют регулярные выражения PCRE (совместимые с perl, которые поддерживают группы захвата)), поэтому мне нужно переписать мои выражения так, чтобы они компилировали ok в Go.
Например, у меня есть следующее регулярное выражение:
`(?<Year>\d{4})-(?<Month>\d{2})-(?<Day>\d{2})`
Это должно принимать входные данные, такие как:
2001-01-20
Группы захвата позволяют записывать год, месяц и день в переменные. Чтобы получить ценность каждой группы, это очень легко; вы просто индексируете в возвращаемые согласованные данные с именем группы, и вы возвращаете значение. Так, например, чтобы получить год, что-то вроде этого псевдокода:
m=expression.Match("2001-01-20")
year = m["Year"]
Это шаблон, который я использую много в своих выражениях, поэтому мне нужно много переписывать.
Итак, есть ли способ получить такую функциональность в Go regexp; как мне переписать эти выражения?