การใช้เรกุลาร์เอ็กเพรสชัน

Go:
การใช้เรกุลาร์เอ็กเพรสชัน

วิธีการ:

ใน Go, แพ็กเกจ regexp จัดเตรียมฟังก์ชันนิพจน์ปกติ นี่คือคู่มือขั้นตอนตามขั้นตอนเกี่ยวกับวิธีใช้:

  1. การคอมไพล์นิพจน์ปกติ

ก่อนอื่น, คอมไพล์รูปแบบ regex ของคุณโดยใช้ regexp.Compile การจัดการข้อผิดพลาดที่อาจเกิดขึ้นระหว่างการคอมไพล์เป็นปฏิบัติการที่ดี

package main

import (
    "fmt"
    "regexp"
)

func main() {
    pattern := "go+"
    r, err := regexp.Compile(pattern)
    if err != nil {
        fmt.Println("Error compiling regex:", err)
        return
    }
    
    fmt.Println("Regex compiled successfully")
}
  1. การจับคู่สตริง

ตรวจสอบว่าสตริงตรงกับรูปแบบโดยใช้เมธอด MatchString

matched := r.MatchString("goooooogle")
fmt.Println("Matched:", matched) // ผลลัพธ์: Matched: true
  1. การหาคู่ที่ตรงกัน

หาคู่แรกที่ตรงกันในสตริง, ใช้เมธอด FindString

match := r.FindString("golang gooooo")
fmt.Println("พบ:", match) // ผลลัพธ์: พบ: gooooo
  1. การหาคู่ที่ตรงกันทั้งหมด

สำหรับการหาคู่ที่ตรงกันทั้งหมด, FindAllString รับสตริงนำเข้าและจำนวนเต็ม n หาก n >= 0, มันจะคืนค่าไม่เกิน n คู่ที่ตรงกัน; หาก n < 0, มันจะคืนค่าคู่ที่ตรงกันทั้งหมด

matches := r.FindAllString("go gooo gooooo", -1)
fmt.Println("คู่ที่ตรงกันทั้งหมด:", matches) // ผลลัพธ์: คู่ที่ตรงกันทั้งหมด: [go gooo gooooo]
  1. การแทนที่คู่ที่ตรงกัน

เพื่อแทนที่คู่ที่ตรงกันด้วยสตริงอื่น, ReplaceAllString เป็นตัวเลือกที่มีประโยชน์

result := r.ReplaceAllString("go gooo gooooo", "Java")
fmt.Println("แทนที่:", result) // ผลลัพธ์: แทนที่: Java Java Java

การขุดลึก

แนะนําในไลบรารีมาตรฐานของ Go, แพ็กเกจ regexp จัดการการค้นหาและการจับคู่รูปแบบการนิพจน์ปกติตามไวยากรณ์ของ Perl. ภายใต้ฮู้ด, เอนจิน regex ของ Go คอมไพล์รูปแบบเป็นรูปแบบของไบต์โค้ด, ซึ่งจากนั้นจะถูกทำการทดสอบโดยเอนจินการจับคู่ที่เขียนด้วย Go เอง. การดำเนินการนี้สละความเร็วบางส่วนที่พบในการดำเนินการโดยตรงบนฮาร์ดแวร์เพื่อความปลอดภัยและการใช้งานง่าย, หลีกเลี่ยงกับดักของการบังคับใช้ข้อมูลล้นที่พบในไลบรารี่ที่ใช้ C.

ถึงแม้จะมีพลัง, regex ใน Go ไม่ได้เสมอเป็นโซลูชันที่เหมาะสมที่สุดสำหรับการจับคู่รูปแบบ, โดยเฉพาะอย่างยิ่งเมื่อจัดการกับข้อมูลที่มีโครงสร้างสูงเช่น JSON หรือ XML. ในกรณีเหล่านี้, ปาร์เซอร์หรือไลบรารี่ที่ออกแบบมาสำหรับรูปแบบข้อมูลเหล่านี้มีประสิทธิภาพและความน่าเชื่อถือที่ดีกว่า. อย่างไรก็ตาม, สำหรับงานที่เกี่ยวข้องกับการประมวลผลข้อความที่ซับซ้อนโดยไม่มีโครงสร้างที่กำหนดไว้อย่างชัดเจน, regex ยังคงเป็นเครื่องมือสำคัญในชุดเครื่องมือของโปรแกรมเมอร์, มีความสมดุลของพลังและความยืดหยุ่นที่น้อยทางเลือกอื่นสามารถเทียบได้.