StepCoding

การใช้งาน Regular Expression เบื้องต้น

อ่าน [1627] หมวดหมู่: Regular Expression

อักขระส่วนมากใน regualr expression จะทำการ match เฉพาะตัวมันเอง เช่น ถ้าเรากำหนดรูปแบบ regular expression ในการค้นหาว่า "cow" เพื่อใช้ในการค้นหา string "Genetic was a cowhand," ผลลัพธ์ที่ได้จะ match กัน เพราะว่าในข้อความนี้มีคำว่า "cow" อยู่ด้วย

อักขระบางตัวมีความหมายพิเศษใน regular expression เช่น caret (^) ที่จุดเริ่มต้นของรูปแบบที่กำหนดใน regular expression เป็นการบอกว่า String ที่นำมาค้นหานั้นจะต้องขึ้นต้นด้วยคำนั้น ๆ เช่น

<?php
$bool = ereg('^cow', 'Genetic was a cowhand');
echo $bool;
// false เนื่องจากข้อความนี้ไม่ได้ขึ้นต้นด้วย cow

$bool = ereg('^cow', 'cowabunga!');
// true เนื่องจากข้อความนี้ขึ้นต้นด้วย cow
?>

ในทางตรงกันข้าม ถ้าเราใช้สัญลักษณ์ dollar sign ($) ไว้ที่จุดสุดท้ายของ regular expression เป็นการบ่งบอกว่า String ที่นำมาค้นหานั้นจะต้องลงท้ายด้วยคำนั้น ๆ เช่น

<?php
$bool = ereg('cow$', 'Genetic was a cowhand');
echo $bool;
// false เพราะว่ามันไม่ได้ลงท้ายด้วย cow

$bool = ereg('cow$', 'Don't have a cow');
echo $bool;
// true เพราะว่ามันลงท้ายด้วย cow
?>

ถ้าเราใช้อักขระ (.) ใน regular expression เป็นการบ่งบอกว่ามันจะ match กับอักขระอะไรก็ได้ (เพียงตัวเดียวเท่านั้น

<?php
$bool = ereg('c.t', 'cat');	// true
$bool = ereg('c.t', 'cut');	// true
$bool = ereg('c.t', 'c t');		// true
$bool = ereg('c.t', 'bat');	// false
$bool = ereg('c.t', 'ct');		// false
?>

ในกรณีที่เราต้องการค้นหารูปแบบที่มีอักขระพิเศษเหล่านี้ (^, $, .) ด้วย (เรียกว่า metacharacter) เราจะต้องทำการ escape มันด้วย backslash (\) เช่น

<?php
$bool = ereg('\$5\.00', 'Your bill is $5.00 exactly');
// true เพราะว่าเราทำการ escape อักขระพิเศษเหล่านี้ไว้แล้วมันจึง match กับข้อความที่นำมาค้นหา
$bool = ereg('$5.00', 'Your bill is $5.00 exactly');
// false เพราะอักขระพิเศษ "$" มันจะตีความหมายผิด
?>

ค่า Default ของ regular expression จะเป็นคุณสมบัติ case-sensitive ดังนั้นถ้าเรากำหนด regular expression "cow" มันจะไม่ match กับข้อความ string คำว่า "COW" แต่ถ้าต้องการให้มันตรวจสอบแบบสถานะ case-insensitive เราจะต้องใช้ฟังก์ชัน eregi() แทน

ผู้สนับสนุน