นิพจน์ทั่วไปเป็นรูปแบบเฉพาะที่สามารถใช้เพื่อจับคู่ ค้นหา และแทนที่สตริงใดๆ ในข้อมูลข้อความ เป็นคุณลักษณะที่มีประสิทธิภาพของภาษาการเขียนโปรแกรมใดๆ ส่วนใหญ่จะใช้ในการตรวจสอบแบบฟอร์มประเภทต่างๆ เช่น การตรวจสอบอีเมล การตรวจสอบรูปแบบโทรศัพท์ การตรวจสอบฟิลด์ชื่อผู้ใช้และรหัสผ่านของแบบฟอร์มการเข้าสู่ระบบ ฯลฯ เนื้อหาเฉพาะใดๆ ของข้อความสามารถค้นหาและแทนที่โดยใช้นิพจน์ทั่วไป ลวดลาย. เรียกอีกอย่างว่า regex หรือ RegExp สัญลักษณ์ประเภทต่างๆ ใช้เพื่อกำหนดรูปแบบ regex
มีฟังก์ชันในตัวจำนวนมากใน PHP สำหรับนิพจน์ทั่วไป ฟังก์ชัน preg_match() เป็นหนึ่งในนั้น ฟังก์ชันนี้ใช้สำหรับจับคู่รูปแบบเฉพาะในข้อมูลสตริง วิธีการใช้ฟังก์ชัน preg_match() ใน PHP สำหรับการทำงานต่างๆ ได้อธิบายไว้ในบทช่วยสอนนี้
ไวยากรณ์:
Int หรือเท็จ preg_match (สตริง$pattern,สตริง$ subject [, อาร์เรย์ &$matches = โมฆะ [,int$flags = 0 [,int$offset = 0]]])ฟังก์ชันนี้สามารถรับอาร์กิวเมนต์ได้ห้าอาร์กิวเมนต์ อาร์กิวเมนต์แรก $pattern บังคับ ซึ่งกำหนดรูปแบบสำหรับการจับคู่ อาร์กิวเมนต์ที่สอง $ subject เป็นข้อบังคับ และมีข้อมูลสตริงที่จะใช้รูปแบบ อาร์กิวเมนต์ที่สาม $matches เป็นทางเลือกและจะส่งคืนอาร์เรย์ตามการจับคู่ อาร์กิวเมนต์ที่สี่, $flags เป็นทางเลือก ซึ่งมีค่าแฟล็กประเภทต่างๆ ตามการจับคู่ อาร์กิวเมนต์ที่ห้า, $offset เป็นทางเลือก และสามารถใช้เพื่อกำหนดตำแหน่งเริ่มต้นของการค้นหา
ตัวอย่างที่ 1: จับคู่รูปแบบโดยคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
ตัวอย่างต่อไปนี้แสดงการใช้ฟังก์ชัน preg_match() สำหรับการจับคู่สตริงในลักษณะที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ สร้างไฟล์ PHP ด้วยสคริปต์ต่อไปนี้
ในที่นี้ มีการใช้รูปแบบสามรูปแบบสำหรับใช้ในฟังก์ชัน preg_match() สามฟังก์ชัน รูปแบบแรก, '/ชอบ/', ใช้สำหรับจับคู่สตริงในลักษณะที่คำนึงถึงขนาดตัวพิมพ์ รูปแบบที่สอง, '/ชอบ/' ใช้สำหรับจับคู่สตริงในลักษณะที่คำนึงถึงขนาดตัวพิมพ์ รูปแบบที่สาม, 'ชอบ / ฉัน' ใช้สำหรับจับคู่สตริงในลักษณะที่ไม่คำนึงถึงขนาดตัวพิมพ์ search_pattern() ฟังก์ชั่นถูกกำหนดไว้ในสคริปต์เพื่อใช้ฟังก์ชัน preg_match() สำหรับการจับคู่ และพิมพ์ข้อความตามค่าที่ส่งคืนของฟังก์ชันนี้
//กำหนดข้อความ
$text = 'ฉันชอบ PHP ฉันชอบจาวาสคริปต์ด้วย';
//กำหนดรูปแบบสามประเภท
$pattern1 = '/ชอบ/';
$pattern2 = '/ชอบ/';
$pattern3 = '/ถูกใจ/ผม';
//กำหนดฟังก์ชันสำหรับค้นหารูปแบบในข้อความ
การทำงานsearch_pattern($pattern, $string)
{
ถ้า( preg_match ($pattern, $string))
โยนออก 'ผลการค้นหา: พบการจับคู่สำหรับรูปแบบ -$pattern
';
อื่น
โยนออก 'ผลการค้นหา: ไม่พบการจับคู่สำหรับรูปแบบ -$pattern
';
}
//พิมพ์ข้อความต้นฉบับ
โยนออก 'ข้อความต้นฉบับคือ: $text
';
//เรียกใช้ฟังก์ชันสามครั้งสำหรับสามรูปแบบ
search_pattern($pattern1, $text);
search_pattern($pattern2, $text);
search_pattern($pattern3, $text);
?>
เอาท์พุต :
ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากเรียกใช้สคริปต์จากเซิร์ฟเวอร์ บรรทัดแรกแสดงข้อความที่มีการค้นหารูปแบบ บรรทัดที่สองแสดงผลลัพธ์ของรูปแบบแรก บรรทัดที่สามแสดงผลลัพธ์ของรูปแบบที่สอง บรรทัดที่สี่แสดงผลลัพธ์ของรูปแบบที่สาม
ตัวอย่างที่ 2: ตรวจสอบ URL
ตัวอย่างต่อไปนี้แสดงวิธีการตรวจสอบที่อยู่ URL โดยใช้ฟังก์ชัน preg_match() สร้างไฟล์ PHP ด้วยสคริปต์ต่อไปนี้
ค่า URL ถูกกำหนดในตัวแปร $url สำหรับการทดสอบ สตริง '@^(?:https://)?([^/]+)@i' ถูกใช้เป็นรูปแบบในฟังก์ชัน preg_match() เพื่อตรวจสอบว่าที่อยู่ URL ถูกต้องหรือไม่ หากถูกต้อง ชื่อโฮสต์และชื่อโดเมนจะถูกพิมพ์ มิฉะนั้น ข้อความแสดงข้อผิดพลาดจะถูกพิมพ์
//กำหนด URL
$url = 'https://www.linuxhint.com';
//กำหนดรูปแบบสำหรับตรวจสอบ URL
$pattern ='@^(?:https://)?([^/]+)@i';
//ตรวจสอบว่า URL ถูกต้องหรือไม่
ถ้า( preg_match ($pattern, $url, $matches1))
{
//พิมพ์ข้อความแสดงความสำเร็จ
โยนออก 'URL นี้ถูกต้อง
';
//พิมพ์อาร์เรย์ที่มีค่าที่ตรงกัน
โยนออก 'ค่าของอาร์เรย์คือ:';
print_r ($matches1);
//ดึงและพิมพ์ค่าโฮสต์
$host = $matches1[1];
โยนออก '
ชื่อโฮสต์คือ:$host';
//ค้นหาชื่อโดเมนจากค่าโฮสต์
preg_match ('/[^.-lex.europa.eu+.[^.íritu+$/', $host, $matches2);
โยนออก '
ชื่อโดเมนคือ:{$matches2[0]}';
}
อื่น
{
//พิมพ์ข้อความแสดงข้อผิดพลาด
โยนออก 'URL ไม่ถูกต้อง.';
}
?>
เอาท์พุต :
ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากเรียกใช้สคริปต์จากเซิร์ฟเวอร์ URL ที่ระบุในสคริปต์นั้นถูกต้อง ดังนั้น ผลลัพธ์จะแสดงค่าของ $matches ชื่อโฮสต์ของ URL และชื่อโดเมนของ URL
ตัวอย่างที่ 3: รูปแบบการค้นหาด้วยแฟล็กและค่าออฟเซ็ต
ตัวอย่างต่อไปนี้แสดงการใช้แฟล็กและค่าออฟเซ็ตในฟังก์ชัน preg_match() สร้างไฟล์ PHP ด้วยสคริปต์ต่อไปนี้
สามรูปแบบถูกใช้ในสคริปต์สำหรับการจับคู่สามประเภท ในฟังก์ชัน preg_match() แรก '/(bangla)(desh)/' ถูกใช้เป็นรูปแบบและค่าแฟล็ก จะใช้ PREG_OFFSET_CAPTURE ค่าของ $matches ตัวแปรจะพิมพ์ตามผลลัพธ์ของฟังก์ชัน preg_match() แรก ในฟังก์ชัน preg_match() ที่สอง '/(bangla)(glad)*(desh)/i' ถูกใช้เป็นรูปแบบและค่าแฟล็ก จะใช้ PREG_UNMATCHED_AS_NULL หากส่วนใดของรูปแบบไม่ตรงกัน ค่า NULL จะถูกเก็บไว้ในอาร์เรย์ ค่าของ $matches ตัวแปรจะพิมพ์ตามผลลัพธ์ของฟังก์ชัน preg_match() ตัวที่สอง ในฟังก์ชัน preg_match() ที่สาม '/glad/' ถูกใช้เป็นรูปแบบ ค่าแฟล็ก PREG_OFFSET_CAPTURE ถูกใช้ และใช้ 3 เป็นค่าออฟเซ็ต ค่าของ $matches ตัวแปรจะพิมพ์ตามผลลัพธ์ของฟังก์ชัน preg_match() ที่สาม
//กำหนดค่าข้อความ
$text = 'บังคลาเทศ';
//กำหนดรูปแบบสามประเภท
$pattern1 = '/ (บางลา) (เดช) / ผม';
$pattern2 = '/ (บางลา) (ดีใจ) * (desh) / ฉัน';
$pattern3 = '/ยินดี/';
//ใช้ค่าสถานะ PREG_OFFSET_CAPTURE
preg_match ($pattern1, $text, $matches,PREG_OFFSET_CAPTURE);
โยนออก '
';
print_r ($matches);
echo '
';
//ใช้ค่าสถานะ PREG_UNMATCHED_AS_NULL
preg_match ($pattern2, $text, $matches,PREG_UNMATCHED_AS_NULL);
โยนออก '
';
print_r ($matches);
echo '
';
//ใช้ค่าสถานะ PREG_OFFSET_CAPTURE และค่าออฟเซ็ต
preg_match ($pattern3, $text, $matches,PREG_OFFSET_CAPTURE, 3);
โยนออก '
';
print_r ($matches);
echo '';
?>
เอาท์พุต :
ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากเรียกใช้สคริปต์จากเซิร์ฟเวอร์
บทสรุป
มีการอธิบายการใช้งานฟังก์ชัน preg_match() ในบทช่วยสอนนี้โดยใช้ตัวอย่างหลายตัวอย่าง มีการใช้อาร์กิวเมนต์ต่างๆ ของฟังก์ชันนี้ด้วย ผู้อ่านจะสามารถใช้ฟังก์ชันนี้ได้อย่างถูกต้องในสคริปต์หลังจากอ่านบทช่วยสอนนี้