Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

Regular Expressions (Regex) ใน PHP

บทความนี้แนะนำ Regular Expressions (Regex) ใน PHP ซึ่งเป็นเครื่องมือสำคัญสำหรับการจัดการข้อความ โดยเน้นที่การใช้งานฟังก์ชัน `preg_match()` สำหรับการตรวจสอบรูปแบ...

Regular Expressions (Regex) ใน PHP: พลังแห่งการจัดการข้อความ

ในโลกของการพัฒนาโปรแกรม การจัดการข้อความเป็นสิ่งที่หลีกเลี่ยงไม่ได้ ไม่ว่าจะเป็นการตรวจสอบรูปแบบอีเมล การค้นหาคำเฉพาะในข้อความ หรือการแทนที่ข้อความที่ต้องการ Regular Expressions (Regex) คือเครื่องมืออันทรงพลังที่ช่วยให้เราจัดการกับข้อความได้อย่างมีประสิทธิภาพ ในบทนี้ เราจะมาเรียนรู้พื้นฐานของ Regex ใน PHP และวิธีการใช้งานฟังก์ชันต่างๆ เพื่อจัดการข้อความอย่างมืออาชีพ

Regex คืออะไร?

Regular Expression หรือ Regex คือลำดับของอักขระที่กำหนดรูปแบบการค้นหา (Search Pattern) ในข้อความ มันเป็นเหมือน "พิมพ์เขียว" ที่อธิบายถึงชุดของสตริงที่ตรงกัน (Matches) Regex ถูกนำไปใช้ในภาษาโปรแกรมต่างๆ รวมถึง PHP เพื่อการตรวจสอบข้อมูล การค้นหา และการแทนที่ข้อความ

ฟังก์ชัน Regex ที่สำคัญใน PHP

PHP มีฟังก์ชันหลายตัวที่รองรับการใช้งาน Regex แต่ฟังก์ชันที่เราจะเน้นในบทนี้คือ preg_match() และ preg_replace() เนื่องจากเป็นฟังก์ชันที่ใช้งานบ่อยและครอบคลุมการใช้งานพื้นฐาน

1. preg_match(): การตรวจสอบรูปแบบ

ฟังก์ชัน preg_match() ใช้เพื่อตรวจสอบว่าสตริงที่กำหนดตรงกับรูปแบบ Regex หรือไม่ มันจะคืนค่า 1 หากพบการจับคู่ (Match) และ 0 หากไม่พบ

<?php
$pattern = "/hello/i"; // รูปแบบ Regex: ค้นหาคำว่า "hello" แบบไม่สนใจตัวพิมพ์เล็ก-ใหญ่ (case-insensitive)
$string = "Hello, world!";

$result = preg_match($pattern, $string);

if ($result) {
  echo "พบการจับคู่!";
} else {
  echo "ไม่พบการจับคู่!";
}
?>

ในตัวอย่างนี้:

  • $pattern คือรูปแบบ Regex ที่เราต้องการค้นหา ซึ่งในที่นี้คือคำว่า "hello"
  • / คือตัวคั่น (Delimiter) ที่ใช้กำหนดขอบเขตของรูปแบบ Regex
  • i คือ Modifier ที่บอกให้ Regex ไม่สนใจตัวพิมพ์เล็ก-ใหญ่
  • $string คือสตริงที่เราต้องการค้นหา
  • preg_match($pattern, $string) จะคืนค่า 1 เนื่องจากพบคำว่า "Hello" (ไม่สนใจตัวพิมพ์เล็ก-ใหญ่) ในสตริง

กรณีใช้งานจริง: การตรวจสอบรูปแบบอีเมล

<?php
$pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";
$email = "test@example.com";

$result = preg_match($pattern, $email);

if ($result) {
  echo "รูปแบบอีเมลถูกต้อง!";
} else {
  echo "รูปแบบอีเมลไม่ถูกต้อง!";
}
?>

รูปแบบ Regex ในตัวอย่างนี้มีความซับซ้อนกว่า แต่ก็สามารถตรวจสอบรูปแบบอีเมลได้อย่างแม่นยำ

ข้อผิดพลาดที่พบบ่อย:

  • การลืม Delimiter: การลืมใส่ / หรือตัวคั่นอื่นๆ จะทำให้เกิดข้อผิดพลาด
  • การไม่ Escape อักขระพิเศษ: อักขระบางตัวใน Regex มีความหมายพิเศษ เช่น ., *, +, ? หากต้องการค้นหาอักขระเหล่านี้จริงๆ ต้องทำการ Escape ด้วย \

2. preg_replace(): การแทนที่ข้อความ

ฟังก์ชัน preg_replace() ใช้เพื่อค้นหาและแทนที่ข้อความที่ตรงกับรูปแบบ Regex ด้วยข้อความใหม่

<?php
$pattern = "/world/i";
$replacement = "PHP";
$string = "Hello, world!";

$newString = preg_replace($pattern, $replacement, $string);

echo $newString; // ผลลัพธ์: Hello, PHP!
?>

ในตัวอย่างนี้:

  • $pattern คือรูปแบบ Regex ที่เราต้องการค้นหา ซึ่งในที่นี้คือคำว่า "world"
  • $replacement คือข้อความใหม่ที่เราต้องการแทนที่
  • $string คือสตริงที่เราต้องการค้นหาและแทนที่
  • preg_replace($pattern, $replacement, $string) จะคืนค่าสตริงใหม่ที่แทนที่คำว่า "world" ด้วย "PHP"

กรณีใช้งานจริง: การลบ HTML Tags

<?php
$pattern = "/<[^>]*>/"; // รูปแบบ Regex: ค้นหา HTML Tags ทั้งหมด
$string = "<p>This is a paragraph.</p><b>This is bold.</b>";

$newString = preg_replace($pattern, "", $string);

echo $newString; // ผลลัพธ์: This is a paragraph.This is bold.
?>

รูปแบบ Regex ในตัวอย่างนี้ใช้เพื่อลบ HTML Tags ทั้งหมดออกจากสตริง

ข้อผิดพลาดที่พบบ่อย:

  • การแทนที่ผิดพลาด: ตรวจสอบให้แน่ใจว่ารูปแบบ Regex ของคุณถูกต้องและตรงกับข้อความที่คุณต้องการแทนที่จริงๆ
  • ประสิทธิภาพ: การใช้ Regex ที่ซับซ้อนมากๆ อาจส่งผลต่อประสิทธิภาพของโปรแกรม ควรพิจารณาใช้วิธีอื่นหากทำได้

Regex Syntax พื้นฐาน

เพื่อให้เข้าใจการใช้งาน Regex ได้อย่างลึกซึ้ง เรามาเรียนรู้ Syntax พื้นฐานที่สำคัญกัน:

  • . (Dot): หมายถึงอักขระใดๆ หนึ่งตัว (ยกเว้น newline)
  • * (Asterisk): หมายถึงอักขระก่อนหน้า 0 ครั้งหรือมากกว่า
  • + (Plus): หมายถึงอักขระก่อนหน้า 1 ครั้งหรือมากกว่า
  • ? (Question Mark): หมายถึงอักขระก่อนหน้า 0 หรือ 1 ครั้ง
  • [] (Square Brackets): หมายถึงชุดของอักขระที่ต้องการจับคู่ เช่น [abc] หมายถึง a, b, หรือ c
  • ^ (Caret): ภายใน [] หมายถึง "ไม่ใช่" เช่น [^abc] หมายถึงอักขระใดๆ ที่ไม่ใช่ a, b, หรือ c
  • ^ (Caret): นอก [] หมายถึงจุดเริ่มต้นของสตริง
  • $ (Dollar Sign): หมายถึงจุดสิ้นสุดของสตริง
  • \ (Backslash): ใช้ Escape อักขระพิเศษ
  • | (Pipe): หมายถึง "หรือ" เช่น a|b หมายถึง a หรือ b
  • () (Parentheses): ใช้ Group อักขระ

ตัวอย่างการใช้งาน Syntax:

<?php
$pattern = "/[0-9]+/"; // ค้นหาตัวเลข 1 ตัวหรือมากกว่า
$string = "There are 123 apples.";

preg_match($pattern, $string, $matches);

print_r($matches); // ผลลัพธ์: Array ( [0] => 123 )

$pattern = "/^Hello/"; // ค้นหาสตริงที่เริ่มต้นด้วย "Hello"
$string = "Hello, world!";

$result = preg_match($pattern, $string);

if ($result) {
  echo "สตริงเริ่มต้นด้วย Hello!";
}
?>

สรุป

Regular Expressions เป็นเครื่องมือที่ขาดไม่ได้สำหรับการจัดการข้อความใน PHP ด้วยฟังก์ชัน preg_match() และ preg_replace() คุณสามารถตรวจสอบและแทนที่ข้อความได้อย่างมีประสิทธิภาพ การเรียนรู้ Syntax Regex จะช่วยให้คุณสร้างรูปแบบการค้นหาที่ซับซ้อนและจัดการกับข้อความได้อย่างมืออาชีพ อย่าลืมฝึกฝนการใช้งาน Regex อย่างสม่ำเสมอเพื่อเพิ่มความชำนาญและประยุกต์ใช้กับงานต่างๆ ได้อย่างคล่องแคล่ว

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service