Sto cercando di trovare l'inizio di un gruppo di acquisizione denominato in una stringa per creare un parser semplice (vedere related question). Per fare ciò, la funzione extract
memorizza l'ultimo carattere per la variabile last4
. Se gli ultimi 4 caratteri sono uguali a "(P <?" È l'inizio di un gruppo di cattura:!Confronto di stringhe in 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
Ma questo stampe di codici a nulla last4String == "(?P<"
non è mai vero, anche se appare questa substrin nell'output se stampo last4String
all'interno del ciclo. Come confrontare le stringhe in Go allora?
E c'è un modo più elegante per convertire una matrice int32 in una stringa di fmt.Sprintf("%c%c%c%c\n", last4[0], last4[1], last4[2], last4[3])
?
Qualcos'altro che potrebbe essere migliore? Il mio codice mi sembra poco elegante.