PHP preg_match(): นิพจน์ทั่วไป (Regex)

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

PHP การแสดงออกปกติ หรือเรียกอีกอย่างว่า regex เป็นอัลกอริทึมการจับคู่รูปแบบที่มีประสิทธิภาพซึ่งสามารถดำเนินการได้ในนิพจน์เดียว นิพจน์ทั่วไปใช้ตัวดำเนินการทางคณิตศาสตร์ เช่น (+,-,^) เพื่อสร้างนิพจน์ที่ซับซ้อน ซึ่งสามารถช่วยให้คุณทำงานต่างๆ เช่น การตรวจสอบที่อยู่อีเมล ที่อยู่ IP เป็นต้น

เหตุใดจึงต้องใช้นิพจน์ทั่วไป

  • นิพจน์ทั่วไปของ PHP ทำให้การระบุรูปแบบในข้อมูลสตริงง่ายขึ้นโดยการเรียกใช้ฟังก์ชันเดียว ซึ่งช่วยประหยัดเวลาในการเขียนโค้ด
  • เมื่อตรวจสอบข้อมูลอินพุตของผู้ใช้ เช่น ที่อยู่อีเมล ชื่อโดเมน หมายเลขโทรศัพท์ ที่อยู่ IP
  • การเน้นคำสำคัญในผลการค้นหา
  • เมื่อสร้างเทมเพลต HTML ที่กำหนดเอง Regex ใน PHP สามารถใช้เพื่อระบุแท็กเทมเพลตและแทนที่ด้วยข้อมูลจริง

ฟังก์ชันนิพจน์ทั่วไปในตัวใน PHP

PHP มีฟังก์ชันในตัวที่ช่วยให้เราสามารถทำงานกับฟังก์ชันปกติได้ ซึ่งเราจะได้เรียนรู้ในบทช่วยสอน PHP Regular Expressions นี้ มาดูฟังก์ชันนิพจน์ทั่วไปที่ใช้กันทั่วไปใน PHP กัน

  • preg_match() ใน PHP – ฟังก์ชั่นนี้ใช้สำหรับจับคู่รูปแบบใน PHP บนสตริง มันจะคืนค่าเป็นจริงหากพบรายการที่ตรงกัน และคืนค่าเป็นเท็จหากไม่พบรายการที่ตรงกัน
  • preg_split() ใน PHP - ฟังก์ชั่นนี้ใช้เพื่อจับคู่รูปแบบกับสตริงแล้วแยกผลลัพธ์ออกเป็นอาร์เรย์ตัวเลข
  • preg_replace() ใน PHP - ฟังก์ชันนี้ใช้เพื่อจับคู่รูปแบบกับสตริง จากนั้นแทนที่การจับคู่ด้วยข้อความที่ระบุ

ด้านล่างนี้คือไวยากรณ์สำหรับฟังก์ชันนิพจน์ทั่วไป เช่น PHP preg_match(), PHP preg_split() หรือ PHP preg_replace()

<?php
function_name('/pattern/',subject);
?>

ที่นี่

  • “function_name(…)” อาจเป็น PHP preg_match(), PHP preg_split() หรือ PHP preg_replace()
  • “/…/” เครื่องหมายทับแสดงถึงจุดเริ่มต้นและจุดสิ้นสุดของฟังก์ชันทดสอบ PHP regex ของเรา
  • “'/pattern/'” คือรูปแบบที่เราต้องจับคู่
  • “เรื่อง” คือสตริงข้อความที่จะจับคู่

ตอนนี้เรามาดูตัวอย่างเชิงปฏิบัติที่ใช้ฟังก์ชัน PHP regex ข้างต้นกัน

Preg_match() ใน PHP

ตัวอย่างแรกใช้ preg_match() ในฟังก์ชัน PHP เพื่อทำการจับคู่รูปแบบอย่างง่ายสำหรับคำว่า 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

เราจะนำวลีสตริงมาขยายเป็นอาร์เรย์ รูปแบบที่จะจับคู่เป็นช่องว่างเดียว

สตริงข้อความที่จะใช้ในตัวอย่างนี้คือ "ฉันชอบนิพจน์ทั่วไป"

รหัสด้านล่างแสดงให้เห็นถึงการดำเนินการตามตัวอย่างข้างต้น

<?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_split()

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

PHP Preg_replace()

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

ตัวอย่างข้างต้นใช้รูปแบบพื้นฐานมาก เมตาอักขระช่วยให้เราสามารถจับคู่รูปแบบที่ซับซ้อนมากขึ้น เช่น ทดสอบความถูกต้องของที่อยู่อีเมล ตอนนี้มาดูเมตาอักขระที่ใช้กันทั่วไป

เมตาคาแรคเตอร์ Descriptไอออน ตัวอย่าง
. จับคู่อักขระเดี่ยวใดๆ ยกเว้นบรรทัดใหม่ /./ จับคู่ทุกสิ่งที่มีอักขระตัวเดียว
^ จับคู่จุดเริ่มต้นของ หรือ สตริง / ไม่รวมอักขระ /^PH/ จับคู่สตริงใดๆ ที่ขึ้นต้นด้วย PH
$ จับคู่รูปแบบที่ส่วนท้ายของสตริง /com$/ ตรงกับ guru99.com,yahoo.com ฯลฯ
* จับคู่อักขระที่เป็นศูนย์ (0) ขึ้นไป /com*/ ตรงกับคอมพิวเตอร์ การสื่อสาร ฯลฯ
+ ต้องมีอักขระนำหน้าปรากฏอย่างน้อยหนึ่งครั้ง /yah+oo/ ตรงกับ yahoo
\ ใช้เพื่อหลีกอักขระเมตา /yahoo+\.com/ ถือว่าจุดเป็นค่าตัวอักษร
[... ] คลาสตัวละคร /[abc]/ ตรงกับ abc
อาริโซน่า จับคู่ตัวอักษรตัวพิมพ์เล็ก /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._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/] ”

ที่นี่

  • “'/…/'” เริ่มต้นและสิ้นสุดนิพจน์ทั่วไป
  • “^[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

[/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/]

ดังที่คุณเห็นจากรายละเอียดตัวอย่างข้างต้น meta character มีประสิทธิภาพมากเมื่อพูดถึงรูปแบบการจับคู่

สรุป

  • Regular Expression หรือ Regex ใน PHP เป็นอัลกอริธึมการจับคู่รูปแบบ
  • นิพจน์ทั่วไปมีประโยชน์มากเมื่อทำการตรวจสอบความถูกต้อง การสร้างระบบเทมเพลต HTML ที่รู้จักแท็ก ฯลฯ
  • PHP มีฟังก์ชันในตัว ได้แก่ PHP preg_match(), PHP preg_split() และ PHP preg_replace() ที่รองรับนิพจน์ทั่วไป
  • เมตาอักขระช่วยให้เราสร้างรูปแบบที่ซับซ้อนได้