我試圖在字符串中找到命名捕獲組的開始,以創建一個簡單的解析器(請參閱related question)。爲此,extract
函數會記住last4
變量中的最後一個字符。如果最後4個字符等於「(P <?」這是一個捕獲組的開頭:!在Go中比較字符串
package main
import "fmt"
const sample string = `/(?P<country>m((a|b).+)(x|y)n)/(?P<city>.+)`
func main() {
extract(sample)
}
func extract(regex string) {
last4 := new([4]int32)
for _, c := range regex {
last4[0], last4[1], last4[2], last4[3] = last4[1], last4[2], last4[3], c
last4String := fmt.Sprintf("%c%c%c%c\n", last4[0], last4[1], last4[2], last4[3])
if last4String == "(?P<" {
fmt.Print("start of capturing group")
}
}
}
http://play.golang.org/p/pqA-wCuvux
但這個代碼打印什麼last4String == "(?P<"
是不正確的,雖然出現這種substrin在輸出,如果我打印last4String
內循環。如何去比較字符串呢?
,並沒有爲Int32數組轉換爲字符串比fmt.Sprintf("%c%c%c%c\n", last4[0], last4[1], last4[2], last4[3])
?
還有什麼比這更好的?我的代碼對我來說看起來有點不雅。