Quantifier ใน POSIX นั้นส่วนมากจะเป็นแบบ greed ซึ่งหมายความว่าเมื่อเรากำหนด quantifier ใน pattern นั้น ๆ มันจะทำการ match กับข้อความมากเท่าที่มันจะตรวจสอบได้ เช่น
<?php
$bool = preg_match('/(<.*>/', '<b>PHP</b> Programming', $match);
// true, $match = array('<b>PHP</b> Programming', '<b>PHP</b>')
?>
จากตัวอย่างจะเห็นว่ามันจะทำการ match กับ > ตัวหลังสุดเท่าที่มันจะตรวจสอบเจอ ซึ่งในกรณีนี้ถ้าเราต้องการเอาแค่ <b> ออกมา จะต้องทำการกำหนด quantifier แบบ non-greed ซึ่งการกำหนด quantifier แบบ greed กับ non-greed ต่างกันตรงที่ non-greed จะมีสัญลักษณ์ ? ตามหลัง quantifier นั้น ๆ เราไปดูตารางกันเลยครับ
| Greedy quantifier | Non-greedy quantifier |
|---|---|
| ? | ?? |
| * | *? |
| + | +? |
| {m} | {m}? |
| {m, } | {m, }? |
| {m, n} | {m,n}? |
เราไปดูครับว่าถ้าเราใช้ quantifier แบบ non-greed มันจะสามารถเอาค่าเฉพาะ <b> ได้อย่างไร
<?php
$bool = preg_match('/(<.*?>)/', '<b>PHP</b> Programming', $match);
// true, $match[1] = "<b>"
?>
ผู้สนับสนุน