PHP preg_match(): นิพจน์ทั่วไป (Regex)
⚡ สรุปอย่างชาญฉลาด
นิพจน์ปกติ (Regular Expressions) ใน PHP เป็นเครื่องมือจับคู่รูปแบบที่ใช้ตรวจสอบความถูกต้อง แยก และแทนที่ข้อความด้วยนิพจน์เดียว บทแนะนำนี้จะครอบคลุมฟังก์ชันหลัก ได้แก่ preg_match, preg_split และ preg_replace อธิบายอักขระพิเศษที่ใช้กันทั่วไป และสร้างรูปแบบการตรวจสอบความถูกต้องของอีเมลที่ใช้งานได้จริงทีละขั้นตอน

Regular expression ใน PHP คืออะไร?
นิพจน์ปกติของ PHPนิพจน์ปกติ (Regular Expression หรือ regex) เป็นเครื่องมือจับคู่รูปแบบที่มีประสิทธิภาพ ซึ่งสามารถทำได้ด้วยนิพจน์เดียว นิพจน์ปกติใช้ตัวอักษรพิเศษ เช่น +, -, และ ^ เพื่อสร้างนิพจน์ที่ซับซ้อน นิพจน์ปกติสามารถช่วยคุณในการทำงานต่างๆ เช่น การตรวจสอบความถูกต้องของที่อยู่อีเมล ที่อยู่ IP และอื่นๆ
เหตุใดจึงต้องใช้นิพจน์ทั่วไป
- นิพจน์ปกติ (Regular Expression) ใน PHP ช่วยให้การระบุรูปแบบในข้อมูลสตริงง่ายขึ้นโดยการเรียกใช้ฟังก์ชันเพียงครั้งเดียว ซึ่งช่วยประหยัดเวลาในการเขียนโค้ด
- เมื่อตรวจสอบความถูกต้องของข้อมูลที่ผู้ใช้ป้อน เช่น ที่อยู่อีเมล ชื่อโดเมน หมายเลขโทรศัพท์ และที่อยู่ IP
- การเน้นคำสำคัญในผลการค้นหา
- เมื่อสร้างเทมเพลต HTML ที่กำหนดเอง Regex ใน PHP สามารถใช้เพื่อระบุแท็กเทมเพลตและแทนที่ด้วยข้อมูลจริง
ฟังก์ชันนิพจน์ทั่วไปในตัวใน PHP
PHP มีฟังก์ชันในตัวที่ช่วยให้เราสามารถทำงานกับนิพจน์ปกติได้ ซึ่งเราจะเรียนรู้ในบทเรียนนี้ มาดูกันว่าฟังก์ชันนิพจน์ปกติที่ใช้กันทั่วไปใน PHP มีอะไรบ้าง
- ฟังก์ชัน `preg_match()` ใน PHP ใช้สำหรับทำการจับคู่รูปแบบในสตริง โดยจะคืนค่า `true` หากพบการจับคู่ และคืนค่า `false` หากไม่พบการจับคู่
- ฟังก์ชัน `preg_split()` ใน PHP ใช้สำหรับค้นหารูปแบบที่ต้องการในสตริง แล้วแยกผลลัพธ์ออกเป็นอาร์เรย์ตัวเลข
- preg_replace() ใน PHP - ฟังก์ชันนี้ใช้เพื่อจับคู่รูปแบบกับสตริง จากนั้นแทนที่การจับคู่ด้วยข้อความที่ระบุ
ด้านล่างนี้คือไวยากรณ์สำหรับฟังก์ชันนิพจน์ปกติ เช่น preg_match(), preg_split() หรือ preg_replace()
<?php
function_name('/pattern/',subject);
?>
ที่นี่
- “function_name(…)” คือ preg_match(), preg_split() หรือ preg_replace()
- เครื่องหมาย “/…/” แสดงถึงจุดเริ่มต้นและจุดสิ้นสุดของนิพจน์ปกติของเรา
- “'/pattern/'” คือรูปแบบที่เราต้องจับคู่
- “เรื่อง” คือสตริงข้อความที่จะจับคู่
ต่อไปนี้เราจะมาดูตัวอย่างการใช้งานจริงของฟังก์ชัน regex ใน PHP ที่กล่าวมาข้างต้นกัน
Preg_match() ใน PHP
ตัวอย่างแรกใช้ฟังก์ชัน preg_match() เพื่อทำการจับคู่รูปแบบอย่างง่ายสำหรับคำว่า guru ในข้อความที่กำหนด URL.
โค้ดด้านล่างแสดงการใช้งานฟังก์ชัน preg_match() สำหรับตัวอย่างข้างต้น
<?php $my_url = "www.guru99.com"; if (preg_match("/guru/", $my_url)) { echo "the url $my_url contains guru"; } else { echo "the url $my_url does not contain guru"; } ?>
เรียกดูไฟล์ URL http://localhost/phptuts/preg_match_simple.php
เรามาตรวจสอบส่วนของโค้ดที่รับผิดชอบผลลัพธ์ที่เราต้องการกันเถอะ preg_match('/guru/', $my_url). ที่นี่,
- “preg_match(…)” เป็นฟังก์ชัน PHP regex
- “'/guru/'” คือรูปแบบนิพจน์ทั่วไปที่จะจับคู่
- “$my_url” คือตัวแปรที่มีข้อความที่จะจับคู่
PHP Preg_split()
ต่อไปนี้เราจะมาดูตัวอย่างอื่นที่ใช้ฟังก์ชัน preg_split() กัน
เราจะนำวลีสตริงมาขยายเป็นอาร์เรย์ รูปแบบที่จะจับคู่เป็นช่องว่างเดียว
สตริงข้อความที่จะใช้ในตัวอย่างนี้คือ "ฉันชอบนิพจน์ทั่วไป"
รหัสด้านล่างแสดงให้เห็นถึงการดำเนินการตามตัวอย่างข้างต้น
<?php $my_text = "I Love Regular Expressions"; $my_array = preg_split("/ /", $my_text); print_r($my_array ); ?>
เรียกดูไฟล์ URL http://localhost/phptuts/preg_split.php
PHP Preg_replace()
ต่อไปเรามาดูฟังก์ชัน preg_replace() กันครับ ฟังก์ชั่น PHP ที่ทำการจับคู่รูปแบบแล้วแทนที่รูปแบบด้วยอย่างอื่น
โค้ดด้านล่างค้นหาคำว่า guru ใน a เชือก.
โค้ดนี้จะแทนที่คำว่า "guru" ด้วยคำว่า "guru" ที่ล้อมรอบด้วยโค้ด CSS ที่เน้นสีพื้นหลัง
<?php $text = "We at Guru99 strive to make quality education affordable to the masses. Guru99.com"; $text = preg_replace("/Guru/", '<span style="background:yellow">Guru</span>', $text); echo $text; ?>
สมมติว่าคุณได้บันทึกไฟล์ preg_replace.php แล้ว ให้เข้าไปที่ไฟล์นั้น URL http://localhost/phptuts/preg_replace.php
เมตาอักขระนิพจน์ปกติ
ตัวอย่างข้างต้นใช้รูปแบบพื้นฐานมาก เมตาแคแรคเตอร์ช่วยให้เราสามารถทำการจับคู่รูปแบบที่ซับซ้อนมากขึ้นได้ เช่น การตรวจสอบความถูกต้องของที่อยู่อีเมล ตอนนี้เรามาดูเมตาแคแรคเตอร์ที่ใช้กันทั่วไปกัน
| เมตาคาแรคเตอร์ | Descriptไอออน | ตัวอย่าง |
|---|---|---|
| . | จับคู่อักขระเดี่ยวใดๆ ยกเว้นบรรทัดใหม่ | /./ จับคู่ทุกสิ่งที่มีอักขระตัวเดียว |
| ^ | ตรงกับจุดเริ่มต้นของสตริงหรือยกเว้นอักขระบางตัว | /^PH/ จับคู่สตริงใดๆ ที่ขึ้นต้นด้วย PH |
| $ | ตรงกับรูปแบบที่ปลายสตริง | /com$/ ตรงกับ guru99.com, yahoo.com เป็นต้น |
| * | ตรงกับอักขระก่อนหน้าศูนย์ตัวขึ้นไป | /com*/ ตรงกับคอมพิวเตอร์ การสื่อสาร ฯลฯ |
| + | ต้องมีอักขระที่อยู่ข้างหน้าปรากฏอย่างน้อยหนึ่งครั้ง | /yah+oo/ ตรงกับ yahoo |
| \ | ใช้เพื่อหลีกเลี่ยงอักขระพิเศษ | /yahoo+\.com/ ถือว่าจุดเป็นค่าตัวอักษร |
| [... ] | คลาสตัวละคร | /[abc]/ ตรงกับ a, b หรือ c |
| อาริโซน่า | จับคู่ตัวอักษรตัวพิมพ์เล็ก | /az/ ตรงกับความเท่ มีความสุข ฯลฯ |
| อาริโซน่า | ตรงกับตัวอักษรตัวพิมพ์ใหญ่ | /AZ/ จับคู่ อะไร อย่างไร ทำไม ฯลฯ |
| 0-9 | จับคู่ตัวเลขใดๆ ระหว่าง 0 ถึง 9 | /0-4/ ตรงกับ 0,1,2,3,4 |
รายการด้านบนจะแสดงเฉพาะ meta character ที่ใช้บ่อยที่สุดในนิพจน์ทั่วไปเท่านั้น
ต่อไปนี้เราจะมาดูตัวอย่างที่ค่อนข้างซับซ้อนซึ่งตรวจสอบความถูกต้องของที่อยู่อีเมลกัน
<?php $my_email = "name@company.com"; if (preg_match("/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/", $my_email)) { echo "$my_email is a valid email address"; } else { echo "$my_email is NOT a valid email address"; } ?>
อธิบายรูปแบบการตรวจสอบความถูกต้องของอีเมล
ที่นี่
- เครื่องหมาย “/…/” เป็นตัวเริ่มต้นและตัวสิ้นสุดของนิพจน์ปกติ
- “^[a-zA-Z0-9._-]” ตรงกับตัวอักษรพิมพ์เล็กหรือพิมพ์ใหญ่ ตัวเลขระหว่าง 0 ถึง 9 และจุด ขีดล่าง หรือขีดกลาง
- “+@[a-zA-Z0-9-]” จะตรงกับสัญลักษณ์ @ ตามด้วยตัวอักษรพิมพ์เล็กหรือพิมพ์ใหญ่ ตัวเลขระหว่าง 0 ถึง 9 หรือเครื่องหมายขีดกลาง
- “+\.[a-zA-Z.]{2,5}$/” จะใช้เครื่องหมายแบ็กสแลชเพื่อหลีกเลี่ยงจุด จากนั้นจะจับคู่ตัวอักษรพิมพ์เล็กหรือพิมพ์ใหญ่ใดๆ ที่มีความยาวระหว่าง 2 ถึง 5 ตัวที่ส่วนท้ายของสตริง
เรียกดูไฟล์ URL http://localhost/phptuts/preg_match.php
จากรายละเอียดข้างต้น คุณจะเห็นได้ว่าเมตาแครี่เออร์มีประสิทธิภาพมากเมื่อพูดถึงการจับคู่รูปแบบ




