go idiom for writing long regular expressions, embedded comments?

go, regex

Solution

Most of the time people just provide a comment with a description of what the regexp matches. But skimming through the Go source code I have found this interesting example:

// removeRE is the list of patterns to skip over at the beginning of a
// message when looking for message text.
var removeRE = regexp.MustCompile(`(?m-s)\A(` +
    // Skip leading "Hello so-and-so," generated by codereview plugin.
    `(Hello(.|\n)*?\n\n)` +

    // Skip quoted text.
    `|((On.*|.* writes|.* wrote):\n)` +
    `|((>.*\n)+)` +

    // Skip lines with no letters.
    `|(([^A-Za-z]*\n)+)` +

    // Skip links to comments and file info.
    `|(http://codereview.*\n([^ ]+:[0-9]+:.*\n)?)` +
    `|(File .*:\n)` +

    `)`,
)

Problem

Some languages have facilities for embedding newlines and whitespace in long regular expressions to make them more readable ``` ( yogi | booboo ) # match something \s ( the \s)? # optional article bear # bears are not Mr. Ranger ``` AFAICT golang does not have that option, is that right? Lacking that, is a composed regex the only option for clarity? Or is there another idiom? I'm not finding any examples of long regexen in go right now.

Original source