วงเล็บปีกกาในนิพจน์ทั่วไปของ PHP
โอเปอเรเตอร์ +, *, ? นั้นดี
อย่างไรก็ตาม มันไม่สามารถระบุจำนวนการซ้ำที่แน่นอนได้
ในกรณีนี้โอเปอเรเตอร์ {} จะมาช่วยคุณ
มันทำงานดังนี้: {5}
- ซ้ำห้าครั้ง, {2,5} - ซ้ำ
ตั้งแต่สองถึงห้าครั้ง (รวมทั้งสองค่า), {2,}
- ซ้ำสองครั้งขึ้นไป
ตัวอย่าง
ในตัวอย่างนี้รูปแบบการค้นหามีลักษณะดังนี้:
ตัวอักษร 'x', ตัวอักษร 'a' หนึ่ง
หรือสองครั้ง, ตัวอักษร 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,2}x#', '!', $str);
?>
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'xx ! ! xaaax'
ตัวอย่าง
ในตัวอย่างนี้รูปแบบการค้นหามีลักษณะดังนี้:
ตัวอักษร 'x', ตัวอักษร 'a' สอง
ครั้งขึ้นไป, ตัวอักษร 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{2,}x#', '!', $str);
?>
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'xx xax ! !'
ตัวอย่าง
ในตัวอย่างนี้รูปแบบการค้นหามีลักษณะดังนี้:
ตัวอักษร 'x', ตัวอักษร 'a' สาม
ครั้ง, ตัวอักษร 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{3}x#', '!', $str);
?>
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'xx xax xaax !'
ตัวอย่าง
ในตัวอย่างนี้รูปแบบการค้นหามีลักษณะดังนี้:
ตัวอักษร 'a' สิบครั้ง:
<?php
$str = 'aaa aaaaaaaaaa aaa';
$res = preg_replace('#a{10}#', '!', $str);
?>
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'aaa ! aaa'
ตัวอย่าง
ในตัวอย่างนี้ผู้เขียนโค้ดต้องการรูปแบบนี้:
ตัวอักษร 'x', ตัวอักษร 'a' สาม
ครั้งหรือน้อยกว่า, ตัวอักษร 'x',
แต่ น่าเสียดายที่รูปแบบนี้ - {,3} -
ไม่ทำงาน จำเป็นต้องระบุให้ชัดเจน:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,3}x#', '!', $str);
?>
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'xx ! ! !'
ตัวอย่าง
ศูนย์ก็อนุญาตให้ใช้ได้:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{0,3}x#', '!', $str);
?>
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'! ! ! !'
โจทย์ปฏิบัติ
กำหนดสตริง:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
เขียนนิพจน์ทั่วไปที่พบสตริง
'abba', 'abbba', 'abbbba'
และเฉพาะพวกมันเท่านั้น
กำหนดสตริง:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
เขียนนิพจน์ทั่วไปที่พบสตริง
ประเภท 'aba' โดยที่ 'b' ปรากฏ
น้อยกว่าสามครั้ง (รวม)
กำหนดสตริง:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
เขียนนิพจน์ทั่วไปที่พบสตริง
ประเภท 'aba' โดยที่ 'b' ปรากฏ
มากกว่าสี่ครั้ง (รวม)