ตัวดำเนินการกำหนดจำนวนการซ้ำของตัวอักษรใน Regular Expressions
มีบางสถานการณ์ที่เราต้องการระบุว่า
ตัวอักษรซ้ำตามจำนวนที่กำหนด
หากเราทราบจำนวนครั้งที่แน่นอน
เราก็สามารถเขียนมันหลายครั้งได้
- #aaaa# แต่จะทำอย่างไรหากเราต้องการ
พูดว่า: ซ้ำหนึ่งครั้งหรือมากกว่า?
สำหรับสิ่งนี้มีตัวดำเนินการ (quantifiers)
กำหนดจำนวนการซ้ำ: เครื่องหมายบวก + (หนึ่งครั้งหรือมากกว่า),
เครื่องหมายดอกจัน * (ศูนย์ครั้งหรือมากกว่า) และ
เครื่องหมายคำถาม ? (ศูนย์หรือหนึ่งครั้ง) ตัวดำเนินการเหล่านี้
ส่งผลต่อตัวอักษรที่อยู่หน้าพวกมัน
ลองดูการทำงานของตัวดำเนินการเหล่านี้ จากตัวอย่าง
ตัวอย่าง
ลองหาสตริงย่อยทั้งหมดตามรูปแบบ ตัวอักษร
'x', ตัวอักษร 'a' ซ้ำหนึ่งครั้งหรือมากกว่า,
ตัวอักษร 'x':
<?php
$str = 'xx xax xaax xaaax xbx';
$res = preg_replace('#xa+x#', '!', $str);
?>
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'xx ! ! ! xbx'
ตัวอย่าง
ลองหาสตริงย่อยทั้งหมดตามรูปแบบ ตัวอักษร
'x', ตัวอักษร 'a' ซ้ำศูนย์ครั้งหรือมากกว่า,
ตัวอักษร 'x':
<?php
$str = 'xx xax xaax xaaax xbx';
$res = preg_replace('#xa*x#', '!', $str);
?>
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'! ! ! ! xbx'
ตัวอย่าง
ลองหาสตริงย่อยทั้งหมดตามรูปแบบ ตัวอักษร
'x', ตัวอักษร 'a' ซ้ำศูนย์หรือหนึ่งครั้ง,
ตัวอักษร 'x':
<?php
$str = 'xx xax xaax xbx';
$res = preg_replace('#xa?x#', '!', $str);
?>
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'! ! xaax xbx'
โจทย์ฝึกหัด
กำหนดสตริง:
<?php
$str = 'aa aba abba abbba abca abea';
?>
เขียน regular expression ที่จะค้นหาสตริง
ตามรูปแบบ: ตัวอักษร 'a', ตัวอักษร 'b'
หนึ่งครั้งหรือมากกว่า, ตัวอักษร 'a'
กำหนดสตริง:
<?php
$str = 'aa aba abba abbba abca abea';
?>
เขียน regular expression ที่จะค้นหาสตริง
ตามรูปแบบ: ตัวอักษร 'a', ตัวอักษร 'b'
ศูนย์ครั้งหรือมากกว่า, ตัวอักษร 'a'
กำหนดสตริง:
<?php
$str = 'aa aba abba abbba abca abea';
?>
เขียน regular expression ที่จะค้นหาสตริง
ตามรูปแบบ: ตัวอักษร 'a', ตัวอักษร 'b'
หนึ่งครั้งหรือไม่มีเลย, ตัวอักษร 'a'
กำหนดสตริง:
<?php
$str = 'aa aba abba abbba abca abea';
?>
เขียน regular expression ที่จะค้นหาสตริง
'aa', 'aba', 'abba',
'abbba', โดยไม่เก็บ 'abca'
และ 'abea'