تطبیق همه (preg_match_all)
تابع «preg_match_all» تمام تطبیق های «عبارت باقاعده (RegExp)» را در یک رشته می گیرد. نتیجه تعداد تطبیق هاست و آرایه $matches با جزئیات پُر می شود. این مثل پیدا کردن همه اسم ها در متن انشا است.
تعریف و کاربرد
preg_match_all() تعداد تطبیق های الگو را برمی گرداند. همچنین آرایه ای از همه تطبیق ها می سازد. اگر خطا رخ دهد، مقدار false برمی گردد.
نگارش و پارامترها
نگارش: preg_match_all(pattern, input, matches, flags, offset). pattern الگوست. input رشته جست وجوست. matches خروجی آرایه است. flags ساختار آرایه را تعیین می کند. offset شروع جست وجو را مشخص می کند.
ساختار آرایه در flags
PREG_PATTERN_ORDER: پیش فرض؛ آرایه بر اساس گروه ها چیده می شود.PREG_SET_ORDER: هر عنصر شامل تمام گروه های یک تطبیق است.
گزینه های تکمیلی
PREG_OFFSET_CAPTURE: هر تطبیق همراه با موقعیت شروع برمی گردد.PREG_UNMATCHED_AS_NULL: زیرالگوهای ناموفق راNULLمی گذارد.
مثال: همه وقوع ها را بگیر
- رشته نمونه را بنویس.
- الگو را با بی تفاوتی حروف بنویس.
- تابع را اجرا کن و چاپ کن.
<?php
$str = "The rain in SPAIN falls mainly on the plains.";
$pattern = "/ain/i";
if (preg_match_all($pattern, $str, $matches)) {
print_r($matches);
}
?>
مثال: کنترل ساختار آرایه
- الگو را با گروه ها بساز.
PREG_PATTERN_ORDERرا بده.- ساختار خروجی را بررسی کن.
<?php
$str = "abc ABC";
$pattern = "/((a)b)(c)/i";
if (preg_match_all($pattern, $str, $matches, PREG_PATTERN_ORDER)) {
print_r($matches);
}
?>
نکات و هشدارها
نکته: اگر offset بزرگ تر از طول رشته باشد، false برمی گردد.
نکته: برای یک تطبیق کافی، از preg_match استفاده کن.
نکته: اگر به جای گرفتن، نیاز به جایگزینی داری، preg_replace را ببین.
مطالعه مرتبط
برای «تطبیق همه» این صفحه مرجع است. همچنین برای خطای regex، preg_last_error را بررسی کن.
جمع بندی سریع
- همه تطبیق ها را برمی گرداند.
- تعداد تطبیق ها خروجی اصلی است.
$matchesآرایه نتایج است.- با flags ساختار خروجی را تنظیم کن.