StepCoding

ฟังก์ชัน Replacing

อ่าน [2107] หมวดหมู่: Perl-Compatible

ฟังก์ชัน preg_replace() มีลักษณะการทำงานเหมือนกับเวลาเราทำการค้นหาและแทนที่ในโปรแกรม text editor ต่าง ๆ มันจะทำการค้นหาจุดที่ค้นเจอตาม pattern ในข้อความ [storng]string ทั้งหมดก่อนแล้วจึงทำการแทนที่มันในจุดที่ค้นเจอนั้น ๆ ทั้งหมด

# รูปแบบ
$new = preg_replace(pattern, replacement, subject [, limit ]);
โดยที่
	$new คือ ตัวแปรที่เก็บข้อความใหม่ที่ได้หลังจากการแทนที่
	pattern คือ regular expression ที่ใช้ในการกำหนดรูปแบบการค้นหา
	subject คือ ข้อความที่นำไปค้นหาตาม pattern
	limit คือ optional เป็นการกำหนดจำนวนที่ต้องการแทนที่ (ในกรณีที่พบหลายตัว)
<?php
$better = preg_replace('/<.*?>/', '!', 'do <b>not</b> press the button');
// $better = 'do !not! press the button'
?>

เราสามารถส่งข้อความที่ต้องการแทนที่ไปเป็นแบบอะเรย์ก็ได้เช่น

<?php
$names = array('Fred Flintstone',
		'Barney Rubble',
		'Wilma Flinstone',
		'Betty Rubble');
$tidy = preg_replace('/(\w)\w* (\w+)/', '\1 \2', $names);
// $tidy = array ('F Flinstone', 'B Rubble', 'W Flinstone', 'B Rubble');
?>

นอกจากส่งค่าข้อความที่ต้องการค้นหาแบบอะเรย์แล้ว ยังสามารถส่งค่า pattern และข้อความ replace เป็นแบบ array ได้เช่นกัน

<?php
$pattern = array("/don't/i", "/won't/i", "/can't/i");
$replace= array('do not', 'will not', 'can not');
$string = "Please don't yellI can't jump while you won't speak";

$conv = preg_replace($pattern, $replace, $string);
// $conv = "Please do not yellI can not jump while you will not speak"
?>

ในตัวอย่างด้านบนนั้นมันจะทำการตรวจสอบ pattern ตำแหน่งนั้น ๆ แล้วแทนที่ด้วยข้อความใน array ตำแหน่งนั้น ๆ เช่นกัน

ในกรณีที่เราส่งค่า pattern แบบ array เข้าไป แต่กำหนดข้อความแทนที่ (replace) เป็นแบบ string เดียวเท่านั้น มันจะนำค่าใน string นั้น ๆ แทนที่ทุก ๆ pattern ที่ match

<?php
$tag_pattern = array('/<.*?>/', '/&.*?;/');
$html = '&eacute; : <b>very</b> cute';
$stripped = preg_replace($tag_pattern, '', $html);
// $stripped = " : very cute"
?>

ในการ replacement เราสามารถใช้วิธีการอ้างอิงข้อความที่ match กับ subpattern ได้โดยเรียกว่า backreference ซึ่งข้อความที่ match กับ subpattern จะถูกเก็บไว้ในตัวแปร $1, $2, $3 เป็นต้น

<?php
echo preg_replace('/(\w)\w+\s+(\w+)/', '$2, $1.', 'Fred Flintstone');
// Flintstone, F.
?>

ผู้สนับสนุน