文字列内の名前付きキャプチャグループの先頭を探して、単純なパーサーを作成しようとしています(related question参照)。これを行うために、extract
関数は、last4
変数の最後の文字を覚えています。 「?(P <」最後の4つの文字が等しい場合には、キャプチャグループの始まりです!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
を印刷する場合。どのようにして移動中の文字列を比較するには?
そしてfmt.Sprintf("%c%c%c%c\n", last4[0], last4[1], last4[2], last4[3])
?
他に良いことがありますか?私のコードは、私にとってやや面白く見えます。