ไดเรกทอรีบทความ
วิธีการจับคู่ด้วยนิพจน์ปกติในฐานข้อมูล MySQL ทำอย่างไร? วิธีการใช้งาน regexp ใน MySQLเป็นอย่างไร?
นิพจน์ทั่วไปของ MySQL
ในบทก่อนหน้านี้ เราได้เรียนรู้ว่า MySQL สามารถใช้LIKE …%สำหรับการจับคู่แบบคลุมเครือได้
MySQL ยังรองรับการจับคู่นิพจน์ทั่วไปอื่นๆ ด้วย ตัวดำเนินการ REGEXP ใช้ใน MySQL สำหรับการจับคู่นิพจน์ทั่วไป
หากคุณรู้จัก PHP หรือ Perl ก็ค่อนข้างตรงไปตรงมา เนื่องจากการจับคู่นิพจน์ทั่วไปของ MySQL นั้นคล้ายคลึงกับสคริปต์เหล่านี้
รูปแบบปกติในตารางต่อไปนี้สามารถใช้กับตัวดำเนินการ REGEXP
| โหมด | ลักษณะ |
|---|---|
| ^ | ตรงกับจุดเริ่มต้นของสตริงอินพุต^ ยังตรงกับตำแหน่งหลัง '\n' หรือ '\r' หากมีการตั้งค่าคุณสมบัติ Multiline ของวัตถุ RegExp |
| $ | จับคู่ส่วนท้ายของสตริงอินพุตหากมีการตั้งค่าคุณสมบัติ Multiline ของวัตถุ RegExp $ จะตรงกับตำแหน่งก่อนหน้า '\n' หรือ '\r' ด้วย |
| . | จับคู่อักขระเดี่ยวใดๆ ยกเว้น "\n"หากต้องการจับคู่อักขระใดๆ รวมถึง '\n' ให้ใช้รูปแบบเช่น '[.\n]' |
| [... ] | คอลเลกชันของตัวละครจับคู่อักขระที่มีอยู่ตัวใดตัวหนึ่งตัวอย่างเช่น '[abc]' จะตรงกับ "plai'a' ใน n". |
| - | ชุดอักขระเชิงลบจับคู่อักขระใด ๆ ที่ไม่มีอยู่ตัวอย่างเช่น '[^abc]' จะตรงกับ 'p' ใน "ธรรมดา" |
| p1|p2|p3 | จับคู่ p1 หรือ p2 หรือ p3ตัวอย่างเช่น 'z|food' จะจับคู่กับ "z" หรือ "food" '(z|f)ood' ตรงกับ "zood" หรือ "food" |
| * | จับคู่นิพจน์ย่อยก่อนหน้าเป็นศูนย์หรือมากกว่าตัวอย่างเช่น zo* จะจับคู่กับ "z" เช่นเดียวกับ "zoo" * เทียบเท่ากับ {0,} |
| + | จับคู่นิพจน์ย่อยก่อนหน้าอย่างน้อยหนึ่งครั้งตัวอย่างเช่น 'zo+' จะจับคู่กับ "zo" และ "zoo" แต่ไม่ตรงกับ "z" + เทียบเท่ากับ {1,} |
| {NS} | n เป็นจำนวนเต็มที่ไม่เป็นลบตรงกันทั้งหมด n ครั้งตัวอย่างเช่น 'o{2}' จะไม่ตรงกับ 'o' ใน "Bob" แต่จะตรงกับ o ทั้งสองใน "food" |
| {น,ม} | ทั้ง m และ n เป็นจำนวนเต็มที่ไม่ติดลบ โดยที่ n <= mตรงกันอย่างน้อย n ครั้งและมากที่สุด m ครั้ง |
ตัวอย่าง
หลังจากที่เข้าใจข้อกำหนดทั่วไปข้างต้นแล้ว เราก็สามารถเขียนคำสั่ง SQL ด้วยนิพจน์ทั่วไปตามข้อกำหนดของเราเองได้ด้านล่างเราจะแสดงตัวอย่างเล็ก ๆ น้อย ๆ (ชื่อตาราง: person_tbl ) เพื่อทำความเข้าใจให้ลึกซึ้งยิ่งขึ้น:
ค้นหาข้อมูลทั้งหมดที่ขึ้นต้นด้วย 'st' ในฟิลด์ชื่อ:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
ค้นหาข้อมูลทั้งหมดที่ลงท้ายด้วย 'ตกลง' ในฟิลด์ชื่อ:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
ค้นหาข้อมูลทั้งหมดที่มีสตริง 'mar' ในฟิลด์ชื่อ:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
ค้นหาข้อมูลทั้งหมดในฟิลด์ชื่อที่ขึ้นต้นด้วยสระหรือลงท้ายด้วยสตริง 'ok':
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
หวังว่า บทความ "วิธีการจับคู่โดยใช้ Regular Expression ในฐานข้อมูล MySQL? การใช้งาน MySQL regexp เช่น" ที่แชร์บนบล็อกของ Chen Weiliang ( https://www.chenweiliang.com/ ) จะเป็นประโยชน์กับคุณ
โปรดแชร์ลิงก์บทความนี้ได้ตามสบาย: https://www.chenweiliang.com/cwl-492.html
