strings.FindRESubmatch
文法
strings.FindRESubmatch PATTERN INPUT [LIMIT]
戻り値
[][]string
エイリアス
findRESubmatch
By default, findRESubmatch
finds all matches. You can limit the number of matches with an optional LIMIT argument. A return value of nil indicates no match.
正規表現を指定する際には、“解釈される” (interpreted) 文字列リテラル (ダブルクォートで囲む) ではなく、そのままの文字列リテラル (バッククォートで囲む) を用いることで、文法を簡易なものにしてください。 “解釈される” 文字列リテラルを用いる場合、バックスラッシュそのものはエスケープする必要があります。
Go 言語の正規表現パッケージでは RE2 文法 を実装しています。
RE2 文法とは、おおざっぱに言えば PCRE が許容する文法のサブセットであり、さまざまな 注意事項 があります。
なお RE2 のエスケープシーケンス \C
はサポートされません。
Demonstrative examples
{{ findRESubmatch `a(x*)b` "-ab-" }} → [["ab" ""]]
{{ findRESubmatch `a(x*)b` "-axxb-" }} → [["axxb" "xx"]]
{{ findRESubmatch `a(x*)b` "-ab-axb-" }} → [["ab" ""] ["axb" "x"]]
{{ findRESubmatch `a(x*)b` "-axxb-ab-" }} → [["axxb" "xx"] ["ab" ""]]
{{ findRESubmatch `a(x*)b` "-axxb-ab-" 1 }} → [["axxb" "xx"]]
Practical example
This Markdown:
- [Example](https://example.org)
- [Hugo](https://gohugo.io)
Produces this HTML:
<ul>
<li><a href="https://example.org">Example</a></li>
<li><a href="https://gohugo.io">Hugo</a></li>
</ul>
To match the anchor elements, capturing the link destination and text:
{{ $regex := `<a\s*href="(.+?)">(.+?)</a>` }}
{{ $matches := findRESubmatch $regex .Content }}
Viewed as JSON, the data structure of $matches
in the code above is:
[
[
"<a href=\"https://example.org\"></a>Example</a>",
"https://example.org",
"Example"
],
[
"<a href=\"https://gohugo.io\">Hugo</a>",
"https://gohugo.io",
"Hugo"
]
]
To render the href
attributes:
{{ range $matches }}
{{ index . 1 }}
{{ end }}
Result:
https://example.org
https://gohugo.io