0Pricing
Go Academy · บทเรียน

พื้นฐาน regexp

คอมไพล์และจับคู่รูปแบบ

พื้นฐาน regexp เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

นิพจน์ปกติคืออะไร

นิพจน์ปกติ (regexp) คือรูปแบบที่อธิบายชุดของสตริง Go มีนิพจน์ปกติให้ใช้ผ่านแพ็กเกจ regexp

นิพจน์เหล่านี้เหมาะอย่างยิ่งสำหรับตรวจสอบความถูกต้องและค้นหาข้อความ

package main

import (
    "fmt"
    "regexp"
)

func main() {
    matched, _ := regexp.MatchString("go+", "gooo")
    fmt.Println(matched)
}

จับคู่ด่วนด้วย MatchString

regexp.MatchString(pattern, s) รายงานว่ารูปแบบปรากฏอยู่ที่ใดก็ตามใน s หรือไม่ โดยคืนค่าบูลีนและข้อผิดพลาด

package main

import (
    "fmt"
    "regexp"
)

func main() {
    ok, _ := regexp.MatchString("cat", "the cat sat")
    fmt.Println(ok)
}

การคอมไพล์รูปแบบ

หากต้องใช้ซ้ำหลายครั้ง ให้คอมไพล์ครั้งเดียวด้วย regexp.Compile ซึ่งคืนค่า *regexp.Regexp ที่นำกลับมาใช้ได้ และคืนข้อผิดพลาดหากรูปแบบไม่ถูกต้อง

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re, err := regexp.Compile("[0-9]+")
    fmt.Println(re.MatchString("abc123"), err)
}

ใช้ MustCompile กับค่าคงที่

regexp.MustCompile จะทำให้โปรแกรมหยุดทำงานทันทีหากรูปแบบไม่ถูกต้อง ใช้กับรูปแบบตายตัวที่ทราบตั้งแต่เวลาคอมไพล์ โดยทั่วไปคือตัวแปรระดับแพ็กเกจ

package main

import (
    "fmt"
    "regexp"
)

var digits = regexp.MustCompile("[0-9]+")

func main() {
    fmt.Println(digits.MatchString("order 42"))
}

คลาสอักขระ

วงเล็บเหลี่ยมใช้กำหนดชุดอักขระที่อนุญาต [aeiou] จะจับคู่อักขระสระใด ๆ ส่วนช่วงอย่าง [a-z] จะจับคู่อักขระในช่วงนั้น

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[a-z]+")
    fmt.Println(re.MatchString("Hello"))
}

คลาสที่กำหนดไว้ล่วงหน้า

ทางลัดช่วยให้ใช้ชุดอักขระทั่วไปได้ง่ายขึ้น: \d คือหลักตัวเลข, \w คืออักขระคำ, \s คือช่องว่าง ในสตริงของ Go ต้องใส่อักขระหลีกให้แบ็กสแลช

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("\\d+")
    fmt.Println(re.MatchString("abc 99"))
}

ตัวระบุจำนวน

ตัวระบุจำนวนบอกว่าต้องจับคู่กี่ครั้ง:

  • * ศูนย์ครั้งขึ้นไป
  • + หนึ่งครั้งขึ้นไป
  • ? ศูนย์หรือหนึ่งครั้ง
  • {2,4} ช่วงจำนวนครั้ง
package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("a{2,3}")
    fmt.Println(re.MatchString("aaa"))
    fmt.Println(re.MatchString("a"))
}

จุดยึด

จุดยึดกำหนดตำแหน่งของการจับคู่: ^ หมายถึงจุดเริ่มต้นของข้อความ และ $ หมายถึงจุดสิ้นสุด ใช้ทั้งสองตัวเพื่อบังคับให้จับคู่กับสตริงทั้งหมด

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("^go$")
    fmt.Println(re.MatchString("go"))
    fmt.Println(re.MatchString("going"))
}

การสลับทางเลือกและกลุ่ม

เครื่องหมายไปป์ | หมายถึง OR และวงเล็บใช้จัดกลุ่มส่วนต่าง ๆ เข้าด้วยกัน (cat|dog)s? จะจับคู่กับ cat, cats, dog หรือ dogs

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(cat|dog)s?")
    fmt.Println(re.MatchString("dogs"))
}

การตรวจสอบรูปแบบ

รูปแบบที่มีจุดยึดเหมาะสำหรับสร้างตัวตรวจสอบ ในที่นี้เราตรวจสอบรหัสรูปแบบ ZIP อย่างง่ายที่ประกอบด้วยหลักตัวเลขห้าหลักพอดี

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("^\\d{5}$")
    fmt.Println(re.MatchString("12345"))
    fmt.Println(re.MatchString("123"))
}

การจับคู่กับไบต์

เมธอดมีทั้งรูปแบบที่รับสตริงและส่วนไบต์ Match ทำงานกับ []byte เช่นเดียวกับ MatchString

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.Match([]byte("id7")))
}

ตรวจสอบความเข้าใจ

ฟังก์ชันใดทำให้โปรแกรมหยุดทำงานเมื่อรูปแบบไม่ถูกต้อง และเหมาะที่สุดสำหรับรูปแบบตายตัว

สรุปทบทวน: พื้นฐาน regexp

คุณได้เรียนรู้แนวคิดพื้นฐานแล้ว:

  • จับคู่ได้อย่างรวดเร็วด้วย MatchString และคอมไพล์ด้วย Compile หรือ MustCompile
  • สร้างรูปแบบจากคลาส ตัวระบุจำนวน จุดยึด และกลุ่ม
  • ใช้ ^ และ $ เป็นจุดยึดเพื่อตรวจสอบสตริงทั้งหมด
package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("^[a-z]+@[a-z]+$")
    fmt.Println(re.MatchString("hi@host"))
}

คำถามที่พบบ่อย

บทเรียน “พื้นฐาน regexp” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “พื้นฐาน regexp” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน regexp”

คอมไพล์และจับคู่รูปแบบ คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “พื้นฐาน regexp” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐาน regexp
  2. การค้นหาและแยกข้อมูล
  3. การแทนที่ข้อความ
  4. เคล็ดลับด้านประสิทธิภาพ
← กลับไปที่ Go Academy