นิพจน์ทั่วไปของ MYSQL (REGEXP) พร้อมไวยากรณ์และตัวอย่าง

นิพจน์ทั่วไปคืออะไร?

นิพจน์ทั่วไปช่วยค้นหาข้อมูลที่ตรงกับเกณฑ์ที่ซับซ้อน เราได้ดูไวลด์การ์ดในบทช่วยสอนก่อนหน้านี้แล้ว หากคุณเคยทำงานกับไวลด์การ์ดมาก่อน คุณอาจสงสัยว่าทำไมจึงต้องเรียนรู้นิพจน์ทั่วไปในเมื่อคุณสามารถได้ผลลัพธ์ที่คล้ายกันโดยใช้ไวลด์การ์ด เนื่องจากเมื่อเปรียบเทียบกับไวลด์การ์ด นิพจน์ทั่วไปช่วยให้เราค้นหาข้อมูลที่ตรงกับเกณฑ์ที่ซับซ้อนยิ่งขึ้นได้

ไวยากรณ์พื้นฐาน

ไวยากรณ์พื้นฐานสำหรับนิพจน์ทั่วไปมีดังนี้

SELECT statements... WHERE fieldname REGEXP 'pattern';

ที่นี่ -

  • “คำสั่ง SELECT…” เป็นมาตรฐาน คำสั่ง SELECT
  • “ชื่อฟิลด์อยู่ที่ไหน” คือชื่อของคอลัมน์ที่จะใช้กับนิพจน์ทั่วไป
  • “REGEXP 'รูปแบบ'” REGEXP คือตัวดำเนินการของนิพจน์ทั่วไป และ 'รูปแบบ' แสดงถึงรูปแบบที่ต้องจับคู่โดย REGEXP RLIKE คือ คำพ้องความหมายสำหรับ REGEXP และให้ผลลัพธ์เดียวกันกับ REGEXP เพื่อหลีกเลี่ยงความสับสนกับตัวดำเนินการ LIKE ควรใช้ REGEXP ดีกว่า แทน.

ตอนนี้เรามาดูตัวอย่างการปฏิบัติ -

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

ข้อความค้นหาข้างต้นจะค้นหาชื่อภาพยนตร์ทั้งหมดที่มีรหัสคำอยู่ ไม่สำคัญว่า "รหัส" จะอยู่ต้น กลาง หรือท้ายชื่อเรื่อง ตราบใดที่มีอยู่ในชื่อเรื่องก็จะได้รับการพิจารณา

สมมติว่าเราต้องการค้นหาภาพยนตร์ที่ขึ้นต้นด้วย a, b, c หรือ d ตามด้วยอักขระอื่นๆ จำนวนเท่าใดก็ได้ เราจะดำเนินการอย่างไรจึงจะบรรลุเป้าหมายนั้น เราสามารถใช้นิพจน์ทั่วไปร่วมกับอักขระเมตาเพื่อให้ได้ผลลัพธ์ที่ต้องการ

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

ดำเนินการสคริปต์ข้างต้นใน MySQL ปรับแต่ง จาก myflixdb เราจะได้ผลลัพธ์ดังนี้

movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6

ตอนนี้เรามาดูนิพจน์ทั่วไปของเราซึ่งรับผิดชอบต่อผลลัพธ์ข้างต้นกันดีกว่า

'^[abcd]' เครื่องหมายรูปหมวก (^) หมายความว่าควรใช้การจับคู่รูปแบบที่จุดเริ่มต้น และรายการอักขระ [abcd] หมายความว่าเฉพาะชื่อภาพยนตร์ที่ขึ้นต้นด้วย a, b, c หรือ d เท่านั้นที่จะถูกส่งกลับในชุดผลลัพธ์ของเรา

มาแก้ไขสคริปต์ด้านบนของเราและใช้รายการ NOT charlist แล้วดูว่าเราจะได้รับผลลัพธ์อะไรหลังจากดำเนินการค้นหาของเรา

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

ดำเนินการสคริปต์ข้างต้นใน MySQL การใช้งาน workbench กับ myflixdb จะให้ผลลัพธ์ดังต่อไปนี้

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
3 X-Men 2008
9 Honey mooners John Schultz 2005 8
16 67% Guilty 2012
17 The Great Dictator Chalie Chaplie 1920 7
18 sample movie Anonymous 8
19 movie 3 John Brown 1920 8

ตอนนี้เรามาดูนิพจน์ทั่วไปของเราซึ่งรับผิดชอบต่อผลลัพธ์ข้างต้นกันดีกว่า

'^[^abcd]' เครื่องหมายรูปหมวก (^) หมายความว่าควรใช้การจับคู่รูปแบบที่จุดเริ่มต้น และรายการอักขระ [^abcd] หมายความว่าชื่อภาพยนตร์ที่ขึ้นต้นด้วยอักขระที่ล้อมรอบจะไม่รวมอยู่ในชุดผลลัพธ์

เมตาอักขระนิพจน์ทั่วไป

สิ่งที่เราดูในตัวอย่างข้างต้นคือรูปแบบที่ง่ายที่สุดของนิพจน์ทั่วไป ตอนนี้เรามาดูการจับคู่รูปแบบนิพจน์ทั่วไปขั้นสูงเพิ่มเติมกัน สมมติว่าเราต้องการค้นหาชื่อภาพยนตร์ที่ขึ้นต้นด้วยรูปแบบ “โค้ด” โดยใช้นิพจน์ทั่วไป เราจะดำเนินการอย่างไร? คำตอบคือ metaตัวละคร ช่วยให้เราปรับแต่งผลการค้นหารูปแบบของเราได้อย่างละเอียดโดยใช้นิพจน์ทั่วไป

ถ่าน Descriptไอออน ตัวอย่าง
* เทศกาล เครื่องหมายดอกจัน (*) meta character ใช้เพื่อจับคู่อินสแตนซ์ของสตริงก่อนหน้าศูนย์ (0) ขึ้นไป SELECT * จากภาพยนตร์ โดยที่ชื่อ REGEXP 'da*'; จะให้ภาพยนตร์ทั้งหมดที่มีตัวละคร “ดา” เช่น Da Vinci Code , Daddy's Little Girls
+ เทศกาล บวก (+) meta character ใช้เพื่อจับคู่สตริงก่อนหน้าอย่างน้อยหนึ่งอินสแตนซ์ SELECT * จาก `ภาพยนตร์` โดยที่ `title` REGEXP 'mon+'; จะให้ภาพยนตร์ทั้งหมดที่มีตัวละคร “mon” เช่น Angels และ Demons
? คำถาม(?) meta character ใช้เพื่อจับคู่ศูนย์ (0) หรือหนึ่งอินสแตนซ์ของสตริงที่อยู่ข้างหน้า SELECT * จาก `หมวดหมู่` WHERE `category_name` REGEXP 'com?'; จะให้หมวดหมู่ทั้งหมดที่มี string com เช่น ตลก โรแมนติกคอมเมดี้
. เทศกาล จุด (.) metaCharacter ใช้เพื่อจับคู่อักขระเดี่ยวใดๆ ยกเว้นการขึ้นบรรทัดใหม่ SELECT * จากภาพยนตร์ที่ `year_released` REGEXP '200.'; จะให้ภาพยนตร์ทั้งหมดที่ออกฉายในปีต่างๆ เริ่มต้นด้วยอักขระ “200” ตามด้วยอักขระตัวเดียว ตัวอย่างเช่น 2005,2007,2008 เป็นต้น
[เอบีซี] เทศกาล ชาร์ลิสต์ [abc] ใช้เพื่อจับคู่อักขระที่แนบมา SELECT * จาก `ภาพยนตร์` WHERE `title` REGEXP '[vwxyz]'; จะให้ภาพยนตร์ทั้งหมดที่มีตัวละครตัวเดียวใน "vwxyz" ตัวอย่างเช่น X-Men, Da Vinci Code เป็นต้น
[^เอบีซี] เทศกาล ชาร์ลิสต์ [^abc] ใช้เพื่อจับคู่อักขระใดๆ ยกเว้นอักขระที่อยู่ล้อมรอบ SELECT * จาก `ภาพยนตร์` WHERE `title` REGEXP '^[^vwxyz]'; จะให้ภาพยนตร์ทั้งหมดที่มีตัวละครอื่นนอกเหนือจากใน "vwxyz"
[AZ] เทศกาล [AZ] ใช้เพื่อจับคู่อักษรตัวพิมพ์ใหญ่ใดๆ SELECT * จาก `สมาชิก` WHERE `postal_address` REGEXP '[AZ]'; จะให้สมาชิกทุกคนที่มีที่อยู่ทางไปรษณีย์ที่มีอักขระตั้งแต่ A ถึง Z เช่น Janet Jones สมาชิกหมายเลข 1
[az] เทศกาล [az] ใช้เพื่อจับคู่อักษรตัวพิมพ์เล็ก SELECT * จาก `สมาชิก` WHERE `postal_address` REGEXP '[az]'; จะให้สมาชิกทุกคนที่มีที่อยู่ทางไปรษณีย์ที่มีอักขระตั้งแต่ a ถึง z เช่น Janet Jones สมาชิกหมายเลข 1
[0 9-] เทศกาล [0 9-] ใช้เพื่อจับคู่ตัวเลขใดๆ ตั้งแต่ 0 ถึง 9 SELECT * จาก `สมาชิก` โดยที่ `contact_number` REGEXP '[0-9]' จะให้หมายเลขติดต่อแก่สมาชิกทุกคนที่ส่งเข้ามา ซึ่งมีอักขระ “[0-9]” เช่น Robert Phil.
^ เทศกาล คาเร็ต (^) ใช้เพื่อเริ่มการแข่งขันตั้งแต่เริ่มต้น SELECT * จาก `ภาพยนตร์` WHERE `title` REGEXP '^[cd]'; ให้ภาพยนตร์ทั้งหมดที่มีชื่อเรื่องขึ้นต้นด้วยตัวละครใดๆ ใน “cd” ตัวอย่างเช่น Code Name Black, Daddy's Little Girls และ Da Vinci Code
| เทศกาล แถบแนวตั้ง (|) ใช้เพื่อแยกทางเลือกอื่น SELECT * จาก `ภาพยนตร์` WHERE `title` REGEXP '^[cd]|^[u]'; ให้ภาพยนตร์ทั้งหมดที่มีชื่อเรื่องขึ้นต้นด้วยอักขระใดๆ ใน "cd" หรือ "u" ตัวอย่างเช่น ชื่อรหัส Black, สาวน้อยของ Daddy, Da Vinci Code และ Underworld – Awakenไอเอ็นจี
- เทศกาล- ตรงกับจุดเริ่มต้นของคำ SELECT * จาก `ภาพยนตร์` WHERE `title` REGEXP '[[:<:]]for';

ให้ภาพยนตร์ทุกเรื่องที่มีชื่อเรื่องขึ้นต้นด้วยตัวละคร ตัวอย่าง: การลืม Sarah Marshal

- เทศกาล - ตรงกับส่วนท้ายของคำ SELECT * จาก `ภาพยนตร์` WHERE `title` REGEXP 'ack[[:>:]]';

ให้หนังทุกเรื่องที่มีชื่อเรื่องลงท้ายด้วยตัวอักษร “แอ๊ค”

.เช่น ชื่อรหัส สีดำ.

[:ระดับ:] เทศกาล [:ระดับ:] ตรงกับคลาสตัวละครเช่น

[:อัลฟ่า:] เพื่อจับคู่ตัวอักษร [:ช่องว่าง:] เพื่อให้เข้ากับพื้นที่สีขาว [:หมัด:] คือการจับคู่เครื่องหมายวรรคตอนและ [:upper:] สำหรับตัวอักษรชั้นบน

SELECT * จาก `ภาพยนตร์` WHERE `title` REGEXP '[:alpha:]';

ให้ภาพยนตร์ทั้งหมดที่มีชื่อเรื่องประกอบด้วยตัวอักษรเท่านั้น

เช่น การลืม Sarah Marshal, X-Men เป็นต้น

คำค้นหานี้ละเว้นภาพยนตร์อย่าง Pirates of the Caribbean 4

แบ็กสแลช (\) ใช้เป็นอักขระหลบหนี หากเราต้องการใช้แบ็กสแลชเป็นส่วนหนึ่งของรูปแบบในนิพจน์ทั่วไป เราควรใช้แบ็กสแลชคู่ (\\)

สรุป

  • นิพจน์ทั่วไปให้การจับคู่รูปแบบที่มีประสิทธิภาพและยืดหยุ่น ซึ่งสามารถช่วยให้เราปรับใช้ยูทิลิตี้การค้นหาพลังงานสำหรับระบบฐานข้อมูลของเรา
  • REGEXP คือตัวดำเนินการที่ใช้เมื่อดำเนินการจับคู่รูปแบบนิพจน์ทั่วไป RLIKE คือคำพ้องความหมาย
  • นิพจน์ทั่วไปรองรับอักขระเมตาจำนวนหนึ่งซึ่งช่วยให้มีความยืดหยุ่นและควบคุมได้มากขึ้นเมื่อดำเนินการจับคู่รูปแบบ
  • แบ็กสแลชใช้เป็นอักขระ escape ในนิพจน์ทั่วไป โดยจะพิจารณาเฉพาะในกรณีที่ใช้แบ็กสแลชสองตัวเท่านั้น
  • นิพจน์ทั่วไปไม่คำนึงถึงขนาดตัวพิมพ์