Я пытаюсь проанализировать несколько тегов в одном строковом литерале.такие как name=testName, key=testKey, columns=(c1, c2, c3)
, и я мог бы рассмотреть возможность добавить больше тегов с другим синтаксисом в этой строке в ближайшем будущем.Поэтому естественно изучить регулярное выражение для его реализации.
относительно синтаксиса: допустимый:
`name=testName,key=testKey`
`name=testName, key=testKey`
`name=testName key=testKey`
`name=testName key=testKey`
`name=testName key=testKey columns=(c1 c2 c3)`
`name=testName key=testKey columns=(c1, c2, c3)`
`name=testName, key=testKey, columns=(c1 c2 c3)`
недействительный:
`name=testName,, key=testKey` (multiple commas in between)
`name=testName, key=testKey,` (end with a comma)
`name=testName, key=testKey, columns=(c1,c2 c3)` u can only use comma or whitespace consistently inside columns, the rule applies to the whole tags as well. see below
`name=testName, key=testKey columns=(c1,c2,c3)`
Я придумываю весь шаблон какэто:
((name=\w+|key=\w+)+,\s*)*(name=\w+|key=\w+)+
Мне интересно, можно ли установить подшаблон в качестве регулярного выражения, а затем объединить их в больший шаблон.например,
patternName := regexp.MustCompile(`name=\w+`)
patternKey := regexp.MustCompile(`key=\w+`)
pattern = ((patternName|patternKey)+,\s*)*(patternName|patternKey)+
, учитывая, что я добавлю больше тегов, весь шаблон определенно станет больше и уродливее.Есть ли какой-нибудь элегантный способ, как комбинированный?