?
This document uses PHP Chinese website manual Release
import "regexp"
概述
索引
Examples
子目錄
regexp 包實現(xiàn)正則表達(dá)式搜索。
接受的正則表達(dá)式的語法與 Perl,Python 和其他語言使用的通用語法相同。更準(zhǔn)確地說,它是 RE2 接受的語法,并在https://golang.org/s/re2syntax中進(jìn)行了描述,\C除外。有關(guān)語法的概述,請運行
go doc regexp/syntax
這個包提供的正則表達(dá)式實現(xiàn)保證在輸入大小的時間線性運行。(這是一個不受大多數(shù)正則表達(dá)式的開源實現(xiàn)保證的屬性。)有關(guān)此屬性的更多信息,請參閱
http://swtch.com/~rsc/regexp/regexp1.html
或任何有關(guān)自動化理論的書。
所有字符都是 UTF-8 編碼的代碼點。
有16種 Regexp 方法匹配正則表達(dá)式并識別匹配的文本。他們的名字與這個正則表達(dá)式相匹配:
Find(All)?(String)?(Submatch)?(Index)?
如果存在“全部”,則該例程匹配整個表達(dá)式的連續(xù)的非重疊匹配。忽略與先前匹配相鄰的空匹配。返回值是一個包含相應(yīng)的非“全部”例程的連續(xù)返回值的片段。這些例程需要一個額外的整數(shù)參數(shù) n ;如果 n>= 0 ,該函數(shù)最多返回 n 個匹配/子匹配。
如果'String'存在,則參數(shù)是一個字符串; 否則它是一個字節(jié)片; 返回值會根據(jù)情況進(jìn)行調(diào)整。
如果存在“Submatch”,則返回值是標(biāo)識表達(dá)式的連續(xù)子匹配的片。子匹配是正則表達(dá)式內(nèi)的帶圓括號的子表達(dá)式(也稱為捕獲組)的匹配項,按左括號順序從左到右編號。Submatch 0是整個表達(dá)式的匹配,submatch 1是第一個加括號的子表達(dá)式的匹配,依此類推。
如果存在'索引',匹配和子匹配由輸入字符串內(nèi)的字節(jié)索引對標(biāo)識:result2 * n:2 * n + 1標(biāo)識第 n 個子匹配的索引。n == 0的對表示整個表達(dá)式的匹配。如果'索引'不存在,則匹配由匹配/子匹配的文本識別。如果索引是負(fù)數(shù),則意味著子表達(dá)式與輸入中的任何字符串都不匹配。
還有一些方法可以應(yīng)用于從 RuneReader 中讀取文本:
MatchReader, FindReaderIndex, FindReaderSubmatchIndex
這個集合可能會增長。請注意,正則表達(dá)式匹配可能需要檢查文本超出匹配返回的文本,因此符合 RuneReader 的文本的方法可能會在返回之前任意讀入輸入。
(還有一些其他方法與此模式不匹配。)
package mainimport ("fmt""regexp")func main() {// Compile the expression once, usually at init time.// Use raw strings to avoid having to quote the backslashes.var validID = regexp.MustCompile(`^[a-z]+\[[0-9]+\]$`) fmt.Println(validID.MatchString("adam[23]")) fmt.Println(validID.MatchString("eve[7]")) fmt.Println(validID.MatchString("Job[48]")) fmt.Println(validID.MatchString("snakey"))}
func Match(pattern string, b []byte) (matched bool, err error)
func MatchReader(pattern string, r io.RuneReader) (matched bool, err error)
func MatchString(pattern string, s string) (matched bool, err error)
func QuoteMeta(s string) string
type Regexp
func Compile(expr string) (*Regexp, error)
func CompilePOSIX(expr string) (*Regexp, error)
func MustCompile(str string) *Regexp
func MustCompilePOSIX(str string) *Regexp
func (re *Regexp) Copy() *Regexp
func (re *Regexp) Expand(dst []byte, template []byte, src []byte, match []int) []byte
func (re *Regexp) ExpandString(dst []byte, template string, src string, match []int) []byte
func (re *Regexp) Find(b []byte) []byte
func (re *Regexp) FindAll(b []byte, n int) [][]byte
func (re *Regexp) FindAllIndex(b []byte, n int) [][]int
func (re *Regexp) FindAllString(s string, n int) []string
func (re *Regexp) FindAllStringIndex(s string, n int) [][]int
func (re *Regexp) FindAllStringSubmatch(s string, n int) [][]string
func (re *Regexp) FindAllStringSubmatchIndex(s string, n int) [][]int
func (re *Regexp) FindAllSubmatch(b []byte, n int) [][][]byte
func (re *Regexp) FindAllSubmatchIndex(b []byte, n int) [][]int
func (re *Regexp) FindIndex(b []byte) (loc []int)
func (re *Regexp) FindReaderIndex(r io.RuneReader) (loc []int)
func (re *Regexp) FindReaderSubmatchIndex(r io.RuneReader) []int
func (re *Regexp) FindString(s string) string
func (re *Regexp) FindStringIndex(s string) (loc []int)
func (re *Regexp) FindStringSubmatch(s string) []string
func (re *Regexp) FindStringSubmatchIndex(s string) []int
func (re *Regexp) FindSubmatch(b []byte) [][]byte
func (re *Regexp) FindSubmatchIndex(b []byte) []int
func (re *Regexp) LiteralPrefix() (prefix string, complete bool)
func (re *Regexp) Longest()
func (re *Regexp) Match(b []byte) bool
func (re *Regexp) MatchReader(r io.RuneReader) bool
func (re *Regexp) MatchString(s string) bool
func (re *Regexp) NumSubexp() int
func (re *Regexp) ReplaceAll(src, repl []byte) []byte
func (re *Regexp) ReplaceAllFunc(src []byte, repl func([]byte) []byte) []byte
func (re *Regexp) ReplaceAllLiteral(src, repl []byte) []byte
func (re *Regexp) ReplaceAllLiteralString(src, repl string) string
func (re *Regexp) ReplaceAllString(src, repl string) string
func (re *Regexp) ReplaceAllStringFunc(src string, repl func(string) string) string
func (re *Regexp) Split(s string, n int) []string
func (re *Regexp) String() string
func (re *Regexp) SubexpNames() []string
Package
MatchString
Regexp.FindAllString
Regexp.FindAllStringSubmatch
Regexp.FindAllStringSubmatchIndex
Regexp.FindString
Regexp.FindStringIndex
Regexp.FindStringSubmatch
Regexp.MatchString
Regexp.ReplaceAllLiteralString
Regexp.ReplaceAllString
Regexp.Split
Regexp.SubexpNames
backtrack.go exec.go onepass.go regexp.go
func Match(pattern string, b []byte) (matched bool, err error)
匹配檢查文本正則表達(dá)式是否與字節(jié)片匹配。更復(fù)雜的查詢需要使用 Compile 和完整的 Regexp 接口。
func MatchReader(pattern string, r io.RuneReader) (matched bool, err error)
MatchReader 檢查文本正則表達(dá)式是否與 RuneReader 讀取的文本匹配。更復(fù)雜的查詢需要使用 Compile 和完整的 Regexp 接口。
func MatchString(pattern string, s string) (matched bool, err error)
MatchString 檢查文本正則表達(dá)式是否匹配字符串。更復(fù)雜的查詢需要使用 Compile 和完整的 Regexp 接口。
package mainimport ("fmt""regexp")func main() { matched, err := regexp.MatchString("foo.*", "seafood") fmt.Println(matched, err) matched, err = regexp.MatchString("bar.*", "seafood") fmt.Println(matched, err) matched, err = regexp.MatchString("a(b", "seafood") fmt.Println(matched, err)}
func QuoteMeta(s string) string
QuoteMeta 返回一個字符串,它引用參數(shù)文本中的所有正則表達(dá)式元字符; 返回的字符串是一個匹配文本文本的正則表達(dá)式。例如,QuoteMeta([foo]
)返回\[foo\]
。
正則表達(dá)式是已編譯正則表達(dá)式的表示形式。除了配置方法(如Longest)之外,Regexp 可以安全地用于多個 goroutine 的并發(fā)使用。
type Regexp struct { // contains filtered or unexported fields}
func Compile(expr string) (*Regexp, error)
編譯解析一個正則表達(dá)式,并且如果成功返回一個可以用來匹配文本的 Regexp 對象。
當(dāng)匹配文本時,正則表達(dá)式會返回一個盡可能早在輸入中開始的匹配(最左邊),并在其中選擇回溯搜索首先找到的匹配。這種所謂的最左邊第一匹配與 Perl,Python 和其他實現(xiàn)使用的語義相同,盡管這個包實現(xiàn)它而沒有回溯的代價。對于 POSIX 最左邊最長的匹配,請參閱 CompilePOSIX 。
func CompilePOSIX(expr string) (*Regexp, error)
CompilePOSIX 就像 Compile,但將正則表達(dá)式限制為 POSIX ERE(egrep) 語法,并將匹配語義更改為最長。
也就是說,當(dāng)匹配文本時,正則表達(dá)式會返回一個盡可能早在輸入中開始的匹配(最左邊),并且在它們之間選擇盡可能長的匹配。這種所謂的最左邊最長匹配與早期正則表達(dá)式實現(xiàn)使用和 POSIX 指定的語義相同。
但是,可以有多個最左邊最長的匹配,具有不同的匹配選項,并且此包與 POSIX 不同。在可能的最左邊最長的匹配中,這個包選擇一個回溯搜索首先找到的那個,而 POSIX 指定匹配被選擇為最大化第一個子表達(dá)的長度,然后第二個等等從左到右。POSIX 規(guī)則在計算上是禁止的,甚至沒有明確定義。
func MustCompile(str string) *Regexp
MustCompile 就像編譯,但如果表達(dá)式不能被解析就會發(fā)生混亂。它簡化了保存已編譯正則表達(dá)式的全局變量的安全初始化。
func MustCompilePOSIX(str string) *Regexp
MustCompilePOSIX 與 CompilePOSIX 類似,但如果表達(dá)式無法解析,則會發(fā)生混亂。它簡化了保存已編譯正則表達(dá)式的全局變量的安全初始化。
func (re *Regexp) Copy() *Regexp
復(fù)制返回從 re 復(fù)制的新 Regexp 對象。
在多個 goroutine 中使用正則表達(dá)式時,給每個 goroutine 自己的副本有助于避免鎖定爭用。
func (re *Regexp) Expand(dst []byte, template []byte, src []byte, match []int) []byte
展開將模板附加到 dst 并返回結(jié)果; 在追加期間,Expand 使用從 src 中抽取的相應(yīng)匹配替換模板中的變量。匹配切片應(yīng)該由 FindSubmatchIndex 返回。
在模板中,變量由 $ name 或 $ {name} 形式的子字符串表示,其中 name 是字母,數(shù)字和下劃線的非空序列。像 $ 1 這樣的純數(shù)字名稱指的是具有相應(yīng)索引的子匹配; 其他名稱指的是捕獲用(?P <name> ...)語法命名的括號。對超出范圍或不匹配的索引或正則表達(dá)式中不存在的名稱的引用將替換為空片段。
在 $ name 表單中,姓名應(yīng)盡可能長:$ 1x等同于$ {1x},而不是$ {1} x,而$ 10等同于$ {10},而不是$ {1} 0 。
要在輸出中插入文字$,請在模板中使用$$。
func (re *Regexp) ExpandString(dst []byte, template string, src string, match []int) []byte
ExpandString 與 Expand 類似,但模板和源代碼都是字符串。它附加并返回一個字節(jié)片段,以便調(diào)用代碼控制分配。
func (re *Regexp) Find(b []byte) []byte
查找返回一個片段,其中包含正則表達(dá)式b中最左邊匹配的文本。返回值 nil 表示不匹配。
func (re *Regexp) FindAll(b []byte, n int) [][]byte
FindAll 是 Find 的所有版本;它返回表達(dá)式的所有連續(xù)匹配的一部分,如包注釋中的 'All' 描述所定義。返回值 nil 表示不匹配。
func (re *Regexp) FindAllIndex(b []byte, n int) [][]int
FindAllIndex 是 FindIndex 的 'All' 版本; 它返回表達(dá)式的所有連續(xù)匹配的一部分,如包注釋中的 'All' 描述所定義。返回值 nil 表示不匹配。
func (re *Regexp) FindAllString(s string, n int) []string
FindAllString 是 FindString 的 'All'版本;它返回表達(dá)式的所有連續(xù)匹配的一部分,如包注釋中的 'All' 描述所定義。返回值 nil 表示不匹配。
package mainimport ("fmt""regexp")func main() { re := regexp.MustCompile("a.") fmt.Println(re.FindAllString("paranormal", -1)) fmt.Println(re.FindAllString("paranormal", 2)) fmt.Println(re.FindAllString("graal", -1)) fmt.Println(re.FindAllString("none", -1))}
func (re *Regexp) FindAllStringIndex(s string, n int) [][]int
FindAllStringIndex 是 FindStringIndex 的 'All' 版本; 它返回表達(dá)式的所有連續(xù)匹配的一部分,如包注釋中的 'All' 描述所定義。返回值 nil 表示不匹配。
func (re *Regexp) FindAllStringSubmatch(s string, n int) [][]string
FindAllStringSubmatch 是 FindStringSubmatch 的 'All' 版本; 它返回表達(dá)式的所有連續(xù)匹配的一部分,如包注釋中的 'All' 描述所定義。返回值 nil 表示不匹配。
package mainimport ("fmt""regexp")func main() { re := regexp.MustCompile("a(x*)b") fmt.Printf("%q\n", re.FindAllStringSubmatch("-ab-", -1)) fmt.Printf("%q\n", re.FindAllStringSubmatch("-axxb-", -1)) fmt.Printf("%q\n", re.FindAllStringSubmatch("-ab-axb-", -1)) fmt.Printf("%q\n", re.FindAllStringSubmatch("-axxb-ab-", -1))}
func (re *Regexp) FindAllStringSubmatchIndex(s string, n int) [][]int
FindAllStringSubmatchIndex 是 FindStringSubmatchIndex 的 'All' 版本; 它返回表達(dá)式的所有連續(xù)匹配的一部分,如包注釋中的 'All' 描述所定義。返回值 nil 表示不匹配。
package mainimport ("fmt""regexp")func main() { re := regexp.MustCompile("a(x*)b")// Indices:// 01234567 012345678// -ab-axb- -axxb-ab- fmt.Println(re.FindAllStringSubmatchIndex("-ab-", -1)) fmt.Println(re.FindAllStringSubmatchIndex("-axxb-", -1)) fmt.Println(re.FindAllStringSubmatchIndex("-ab-axb-", -1)) fmt.Println(re.FindAllStringSubmatchIndex("-axxb-ab-", -1)) fmt.Println(re.FindAllStringSubmatchIndex("-foo-", -1))}
func (re *Regexp) FindAllSubmatch(b []byte, n int) [][][]byte
FindAllSubmatch 是 FindSubmatch 的 'All' 版本; 它返回表達(dá)式的所有連續(xù)匹配的一部分,如包注釋中的 'All' 描述所定義。返回值 nil 表示不匹配。
func (re *Regexp) FindAllSubmatchIndex(b []byte, n int) [][]int
FindAllSubmatchIndex 是 FindSubmatchIndex 的 'All' 版本; 它返回表達(dá)式的所有連續(xù)匹配的一部分,如包注釋中的 'All' 描述所定義。返回值 nil 表示不匹配。
func (re *Regexp) FindIndex(b []byte) (loc []int)
FindIndex 返回一個兩個元素的整數(shù)切片,用于定義正則表達(dá)式 b 中最左邊匹配的位置。匹配本身在 b [loc0:loc1]。返回值 nil 表示不匹配。
func (re *Regexp) FindReaderIndex(r io.RuneReader) (loc []int)
FindReaderIndex 返回一個由元素組成的雙元素切片,用于定義從 RuneReader 讀取的文本中正則表達(dá)式最左邊匹配的位置。在字節(jié)偏移量 loc0 到 loc1-1 的輸入流中找到匹配文本。返回值 nil 表示不匹配。
func (re *Regexp) FindReaderSubmatchIndex(r io.RuneReader) []int
FindReaderSubmatchIndex 返回一個片段,它保存標(biāo)識由 RuneReader 讀取的文本正則表達(dá)式的最左邊匹配的索引對,以及它的子表達(dá)式的匹配(如果有的話),如反饋中的 “Submatch” 和 “Index” 描述。返回值 nil 表示不匹配。
func (re *Regexp) FindString(s string) string
FindString 返回一個字符串,其中包含正則表達(dá)式的s中最左邊匹配的文本。如果不匹配,則返回值為空字符串,但如果正則表達(dá)式成功匹配空字符串,則它也將為空。如果有必要區(qū)分這些情況,請使用 FindStringIndex 或 FindStringSubmatch 。
package mainimport ("fmt""regexp")func main() { re := regexp.MustCompile("foo.?") fmt.Printf("%q\n", re.FindString("seafood fool")) fmt.Printf("%q\n", re.FindString("meat"))}
func (re *Regexp) FindStringIndex(s string) (loc []int)
FindStringIndex 返回一個整數(shù)的兩個元素切片,用于定義正則表達(dá)式的 s 中最左邊匹配的位置。匹配本身在 s [loc0:loc1] 。返回值 nil 表示不匹配。
package mainimport ("fmt""regexp")func main() { re := regexp.MustCompile("ab?") fmt.Println(re.FindStringIndex("tablett")) fmt.Println(re.FindStringIndex("foo") == nil)}
func (re *Regexp) FindStringSubmatch(s string) []string
FindStringSubmatch 返回一段字符串,其中包含 s 中正則表達(dá)式最左邊匹配的文本以及其子表達(dá)式的匹配(如果有),如反饋中的 'Submatch' 描述所定義。返回值 nil 表示不匹配。
package mainimport ("fmt""regexp")func main() { re := regexp.MustCompile("a(x*)b(y|z)c") fmt.Printf("%q\n", re.FindStringSubmatch("-axxxbyc-")) fmt.Printf("%q\n", re.FindStringSubmatch("-abzc-"))}
func (re *Regexp) FindStringSubmatchIndex(s string) []int
FindStringSubmatchIndex 返回一個片段,它持有標(biāo)識 s 中正則表達(dá)式的最左邊匹配的索引對,以及它的子表達(dá)式的匹配(如果有的話),如包注釋中的 'Submatch' 和 'Index' 描述所定義的。返回值 nil 表示不匹配。
func (re *Regexp) FindSubmatch(b []byte) [][]byte
FindSubmatch 返回一片切片,其中包含 b 中正則表達(dá)式最左邊匹配的文本以及其子表達(dá)式的匹配(如果有),如包注釋中的 'Submatch' 描述所定義。返回值 nil 表示不匹配。
func (re *Regexp) FindSubmatchIndex(b []byte) []int
FindSubmatchIndex 返回一個片段,該片段包含標(biāo)識 b 中正則表達(dá)式的最左邊匹配的索引對以及它的子表達(dá)式的匹配(如果有的話),如注釋中的 'Submatch' 和 'Index' 描述所定義的。返回值 nil 表示不匹配。
func (re *Regexp) LiteralPrefix() (prefix string, complete bool)
LiteralPrefix 返回一個文字字符串,它必須開始正則表達(dá)式 re 的任何匹配。如果文字字符串包含整個正則表達(dá)式,它將返回 boolean 值 true 。
func (re *Regexp) Longest()
最長使得未來的搜索更喜歡最左邊最長的匹配。也就是說,當(dāng)匹配文本時,正則表達(dá)式會返回一個盡可能早在輸入中開始的匹配(最左邊),并且在它們之間選擇盡可能長的匹配。此方法修改正則表達(dá)式,可能不會與任何其他方法同時調(diào)用。
func (re *Regexp) Match(b []byte) bool
匹配報告正則表達(dá)式匹配字節(jié)片段 b 。
func (re *Regexp) MatchReader(r io.RuneReader) bool
MatchReader 報告正則表達(dá)式是否匹配由符文閱讀器讀取的文本。
func (re *Regexp) MatchString(s string) bool
MatchString 報告 Regexp 是否匹配字符串 s 。
package mainimport ("fmt""regexp")func main() { re := regexp.MustCompile("(gopher){2}") fmt.Println(re.MatchString("gopher")) fmt.Println(re.MatchString("gophergopher")) fmt.Println(re.MatchString("gophergophergopher"))}
func (re *Regexp) NumSubexp() int
NumSubexp 返回此正則表達(dá)式中帶括號的子表達(dá)式的數(shù)量。
func (re *Regexp) ReplaceAll(src, repl []byte) []byte
ReplaceAll 返回 src 的一個副本,用替換文本 repl 替換正則表達(dá)式的匹配。在內(nèi)部 repl 中, $ 符號被解釋為在 Expand 中,因此例如 $ 1 代表第一個子匹配的文本。
func (re *Regexp) ReplaceAllFunc(src []byte, repl func([]byte) []byte) []byte
ReplaceAllFunc 返回一個 src 的副本,其中 Regexp 的所有匹配已被替換為應(yīng)用于匹配字節(jié)片的函數(shù) repl 的返回值。由 repl 返回的替換被直接替換,而不使用 Expand 。
func (re *Regexp) ReplaceAllLiteral(src, repl []byte) []byte
ReplaceAllLiteral 返回 src 的一個副本,將 Regexp 的匹配替換為替換字節(jié) repl 。替換 repl 被直接替換,而不使用 Expand 。
func (re *Regexp) ReplaceAllLiteralString(src, repl string) string
ReplaceAllLiteralString 返回 src 的副本,用替換字符串 repl 替換 Regexp 的匹配項。替換 repl 被直接替換,而不使用 Expand 。
package mainimport ("fmt""regexp")func main() { re := regexp.MustCompile("a(x*)b") fmt.Println(re.ReplaceAllLiteralString("-ab-axxb-", "T")) fmt.Println(re.ReplaceAllLiteralString("-ab-axxb-", "$1")) fmt.Println(re.ReplaceAllLiteralString("-ab-axxb-", "${1}"))}
func (re *Regexp) ReplaceAllString(src, repl string) string
ReplaceAllString 返回 src 的副本,用替換字符串 repl 替換正則表達(dá)式的匹配項。在內(nèi)部 repl 中,$ 符號被解釋為在 Expand 中,因此例如 $ 1 代表第一個子匹配的文本。
package mainimport ("fmt""regexp")func main() { re := regexp.MustCompile("a(x*)b") fmt.Println(re.ReplaceAllString("-ab-axxb-", "T")) fmt.Println(re.ReplaceAllString("-ab-axxb-", "$1")) fmt.Println(re.ReplaceAllString("-ab-axxb-", "$1W")) fmt.Println(re.ReplaceAllString("-ab-axxb-", "${1}W"))}
func (re *Regexp) ReplaceAllStringFunc(src string, repl func(string) string) string
ReplaceAllStringFunc 返回一個 src 的副本,其中 Regexp 的所有匹配已被替換為應(yīng)用于匹配子字符串的函數(shù) repl 的返回值。由 repl 返回的替換被直接替換,而不使用 Expand 。
func (re *Regexp) Split(s string, n int) []string
將切片 s 分割成由表達(dá)式分隔的子字符串,并在這些表達(dá)式匹配之間返回一個子字符串片段。
此方法返回的片包含所有沒有包含在由 FindAllString 返回的片中的子串。當(dāng)調(diào)用一個不包含元字符的表達(dá)式時,它相當(dāng)于 strings.SplitN 。
例:
s := regexp.MustCompile("a*").Split("abaabaccadaaae", 5)// s: ["", "b", "b", "c", "cadaaae"]
計數(shù)決定要返回的子字符串的數(shù)量:
n > 0: at most n substrings; the last substring will be the unsplit remainder.n == 0: the result is nil (zero substrings)n < 0: all substrings
package mainimport ("fmt""regexp")func main() { a := regexp.MustCompile("a") fmt.Println(a.Split("banana", -1)) fmt.Println(a.Split("banana", 0)) fmt.Println(a.Split("banana", 1)) fmt.Println(a.Split("banana", 2)) zp := regexp.MustCompile("z+") fmt.Println(zp.Split("pizza", -1)) fmt.Println(zp.Split("pizza", 0)) fmt.Println(zp.Split("pizza", 1)) fmt.Println(zp.Split("pizza", 2))}
func (re *Regexp) String() string
字符串返回用于編譯正則表達(dá)式的源文本。
func (re *Regexp) SubexpNames() []string
SubexpNames 返回此 Regexp 中帶括號的子表達(dá)式的名稱。第一個子表達(dá)式的名稱是 names1 ,因此如果 m 是匹配片,則 mi 的名稱是 SubexpNames()i 。由于整個正則表達(dá)式不能被命名,names0 總是空字符串。slice 不應(yīng)該被修改。
package mainimport ("fmt""regexp")func main() { re := regexp.MustCompile("(?P<first>[a-zA-Z]+) (?P<last>[a-zA-Z]+)") fmt.Println(re.MatchString("Alan Turing")) fmt.Printf("%q\n", re.SubexpNames()) reversed := fmt.Sprintf("${%s} ${%s}", re.SubexpNames()[2], re.SubexpNames()[1]) fmt.Println(reversed) fmt.Println(re.ReplaceAllString("Alan Turing", reversed))}
Name | Synopsis |
---|---|
syntax | 包語法將正則表達(dá)式解析為解析樹并將解析樹編譯為程序。 |