Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Go中进行可选的regexp匹配_Regex_Go - Fatal编程技术网

如何在Go中进行可选的regexp匹配

如何在Go中进行可选的regexp匹配,regex,go,Regex,Go,假设我有以下两种类型的字符串输入: 1) "feat: this is a feature" 2) "feat[JIRA-xxxx]: this is Jira feature 字符串包含三个部分,其中feat是类型,JIRA xxx内部[]是可选的JIRA故事id,后面的其余部分:是主题 我想使用一个regexp来匹配这三个部分,如果不存在可选文件,则应该得到nil。以下是我的代码: var re *regexp.Regexp re = regexp.MustCompile("^(\\w*)

假设我有以下两种类型的字符串输入:

1) "feat: this is a feature"
2) "feat[JIRA-xxxx]: this is Jira feature
字符串包含三个部分,其中
feat
是类型,
JIRA xxx
内部
[]
是可选的JIRA故事id,
后面的其余部分:
是主题

我想使用一个regexp来匹配这三个部分,如果不存在可选文件,则应该得到nil。以下是我的代码:

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 ID部分是可选的,因此我必须使用
()?
,但
()
具有返回匹配值的其他含义,因此对于我的代码,它返回四个匹配项:

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

如何修改表达式以便只获得预期的3个匹配项?

使用
?:
修改器创建非捕获组:

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

.

太好了!这正是我要找的。