Как сделать необязательное регулярное выражение в Go - PullRequest
1 голос
/ 05 июля 2019

Скажем, у меня есть следующие два типа строковых входов:

1) "feat: this is a feature"
2) "feat[JIRA-xxxx]: this is Jira feature

Строка состоит из трех частей, там feat - это Тип, JIRA-xxx внутри [] - необязательный идентификатор истории Jira, а остальная часть после : - тема.

Я хочу использовать одно регулярное выражение для соответствия трем частям, необязательный файл должен получить ноль, если его нет. Вот мой код:

var re *regexp.Regexp
re = regexp.MustCompile("^(\\w*)(\\[(.*)\\])?\\:\\s(.*)$")

input := "feat[JIRA-xxxx]: this is Jira feature"
res := re.FindAllStringSubmatch(input, -1)
fmt.Print("%q", res)

У моего регулярного выражения есть проблема. Поскольку часть идентификатора Jira является необязательной, я должен использовать ()?, но у () есть другое значение возврата совпадающего значения, поэтому в моем коде он возвращает четыре совпадения:

`feat`, `[JIRA-xxx]`, JIRA-xxx`, `this is Jira feature`

Как изменить выражение так, чтобы я получал только предполагаемые 3 совпадения?

1 Ответ

3 голосов
/ 05 июля 2019

Используйте модификатор ?: для создания группы без захвата:

re = regexp.MustCompile("^(\\w*)(?:\\[(.*)\\])?\\:\\s(.*)$")

Запустите его на детской площадке .

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