กลุ่มอักขระใน Regular Expression PHP
มีคำสั่งพิเศษที่ช่วยให้เลือกอักขระทั้งกลุ่มได้ในคราวเดียว คำสั่ง
\d หมายถึง ตัวเลขตั้งแต่ 0 ถึง 9
คำสั่ง \w หมายถึง ตัวเลข ตัวอักษรละติน
หรือเครื่องหมายขีดล่าง คำสั่ง \s
หมายถึงช่องว่างหรืออักขระเว้นวรรค:
ช่องว่าง ขึ้นบรรทัดใหม่ แท็บ คุณสามารถ
กลับค่าคำสั่งได้โดยการเขียนตัวพิมพ์ใหญ่
ตัวอย่างเช่น ถ้า \d คือตัวเลข
ดังนั้น \D คือ "ไม่ใช่ตัวเลข"
ตัวอย่าง
ลองหาตัวเลขทั้งหมด:
<?php
$str = '1 12 123';
$res = preg_replace('#\d#', '!', $str);
?>
ผลลัพธ์ที่บันทึกลงในตัวแปรจะเป็นดังนี้:
'! !! !!!'
ตัวอย่าง
โอเปอเรเตอร์ทำซ้ำจะมองว่าคำสั่งกลุ่มเป็นหนึ่งหน่วย
จึงไม่จำเป็นต้องใช้วงเล็บกลุ่ม ในตัวอย่างถัดไป รูปแบบการค้นหา
จะเป็นดังนี้: ตัวเลขตั้งแต่ 0 ถึง 9
หนึ่งครั้งหรือมากกว่า:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\d+#', '!', $str);
?>
ผลลัพธ์ที่บันทึกลงในตัวแปรจะเป็นดังนี้:
'! ! ! abc @@@'
ตัวอย่าง
ในตัวอย่างถัดไป รูปแบบการค้นหา
จะเป็นดังนี้: อะไรก็ได้หนึ่งครั้งหรือมากกว่า
แต่ไม่ใช่ตัวเลขตั้งแต่ 0 ถึง 9:
<?php
$str = '123abc3@@';
$res = preg_replace('#\D+#', '!', $str);
?>
ผลลัพธ์ที่บันทึกลงในตัวแปรจะเป็นดังนี้:
'123!3!'
ตัวอย่าง
ในตัวอย่างนี้ รูปแบบการค้นหาจะเป็นดังนี้: อักขระเว้นวรรคหนึ่งครั้ง:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
ผลลัพธ์ที่บันทึกลงในตัวแปรจะเป็นดังนี้:
'1!12!123!abc!@@@'
ตัวอย่าง
ในตัวอย่างนี้ รูปแบบการค้นหาจะเป็นดังนี้:
อักขระที่ไม่ใช่อักขระเว้นวรรคหนึ่งครั้งหรือมากกว่า
สตริงย่อยทั้งหมดที่คั่นด้วยช่องว่างจะถูกแทนที่
ด้วย '!':
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\S+#', '!', $str);
?>
ผลลัพธ์ที่บันทึกลงในตัวแปรจะเป็นดังนี้:
'! ! ! ! !'
ตัวอย่าง
ในตัวอย่างนี้ รูปแบบการค้นหาจะเป็นดังนี้:
ตัวเลขหรือตัวอักษรหนึ่งครั้งหรือมากกว่า
สตริงย่อยทั้งหมดที่ประกอบด้วยตัวเลขและตัวอักษร
จะถูกแทนที่ด้วย '!':
<?php
$str = '1 12 123a Abc @@@';
$res = preg_replace('#\w+#', '!', $str);
?>
ผลลัพธ์ที่บันทึกลงในตัวแปรจะเป็นดังนี้:
'! ! ! ! @@@'
ตัวอย่าง
ในตัวอย่างนี้ รูปแบบการค้นหาจะเป็นดังนี้:
ไม่ใช่ตัวเลขและไม่ใช่ตัวอักษรหนึ่งครั้งหรือมากกว่า
คำนิยามนี้ในกรณีของเราจะตรงกับ
'@@@' และช่องว่างทั้งหมด (เพราะช่องว่างก็
ไม่ใช่ตัวเลขและไม่ใช่ตัวอักษร) โปรดสังเกต
ว่าตอนท้ายมี '!' หนึ่งอัน - สตริง
' @@@' ที่มีช่องว่างอยู่ข้างหน้าถูกแปลงเป็นมัน:
$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);
ผลลัพธ์ที่บันทึกลงในตัวแปรจะเป็นดังนี้:
'1!12!123!Abc!'
โจทย์ฝึกหัด
กำหนดสตริง:
<?php
$str = 'a1a a2a a3a a4a a5a aba aca';
?>
เขียน Regular Expression ที่จะค้นหาสตริง
ที่ มีตัวอักษร 'a' อยู่ที่ขอบทั้งสองด้าน
และมีตัวเลขหนึ่งตัวอยู่ระหว่างกลาง
กำหนดสตริง:
<?php
$str = 'a1a a22a a333a a4444a a55555a aba aca';
?>
เขียน Regular Expression ที่จะค้นหาสตริง
ที่ มีตัวอักษร 'a' อยู่ที่ขอบทั้งสองด้าน
และมีตัวเลขจำนวนเท่าใดก็ได้อยู่ระหว่างกลาง
กำหนดสตริง:
<?php
$str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>
เขียน Regular Expression ที่จะค้นหาสตริง
ที่ มีตัวอักษร 'a' อยู่ที่ขอบทั้งสองด้าน
และมีตัวเลขจำนวนเท่าใดก็ได้อยู่ระหว่างกลาง (รวมถึง
ศูนย์ตัวด้วย นั่นคือสตริง 'aa')
กำหนดสตริง:
<?php
$str = 'avb a1b a2b a3b a4b a5b abb acb';
?>
เขียน Regular Expression ที่จะค้นหาสตริง
ในรูปแบบต่อไปนี้: มีตัวอักษร
'a' และ 'b' อยู่ที่ขอบทั้งสองด้าน
และระหว่างกลาง - ไม่ใช่ตัวเลข
กำหนดสตริง:
<?php
$str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>
เขียน Regular Expression ที่จะค้นหาสตริง
ในรูปแบบต่อไปนี้: มีตัวอักษร
'a' และ 'b' อยู่ที่ขอบทั้งสองด้าน
และระหว่างกลาง - ไม่ใช่ตัวอักษรและไม่ใช่ตัวเลข
กำหนดสตริง:
<?php
$str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>
เขียน Regular Expression ที่จะแทนที่ช่องว่างทั้งหมด
ด้วย '!'