package main

import (
	"fmt"
	"regexp"
)

func main() {
	// MustCompile untuk pola tetap: galat pola terdeteksi saat program mulai.
	angka := regexp.MustCompile(`\d+`)

	teks := "Stok 1024 dan 77 unit diterima hari ini."
	fmt.Println("MatchString :", angka.MatchString(teks))
	fmt.Println("FindString  :", angka.FindString(teks))
	fmt.Println("FindAll     :", angka.FindAllString(teks, -1))
	fmt.Println("ReplaceAll  :", angka.ReplaceAllString(teks, "#N"))

	// Grup penamaan menandai bagian-bagian pola.
	pola := regexp.MustCompile(`(?P<kode>[A-Z]+)-(?P<angka>\d+)`)
	m := pola.FindStringSubmatch("pesanan GO-2026 siap dikirim")
	for _, nama := range pola.SubexpNames() {
		if nama != "" {
			fmt.Printf("grup %-6s = %s\n", nama, m[pola.SubexpIndex(nama)])
		}
	}

	// Validasi email sederhana (bukan standar penuh RFC 5322).
	email := regexp.MustCompile(`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`)
	for _, e := range []string{"budi@example.com", "siti@@salah"} {
		fmt.Printf("email %-18s valid: %v\n", e, email.MatchString(e))
	}

	// Compile untuk pola yang baru datang saat runtime.
	re, err := regexp.Compile(`[0-9]+`)
	if err != nil {
		fmt.Println("pola salah:", err)
		return
	}
	fmt.Println("Compile     :", re.MatchString("versi go 1.27"))
}
