الدالة preg_replace_callback()
في PHP
(PHP 4 >= 4.0.5, PHP 5, PHP 7)
تبحث الدالة preg_replace_callback()
عن تعبير نمطي وتستبدله باستخدام دالة مُعرَّفة من المستخدم.
الوصف
mixed preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit= -1 [, int &$count ]] )
يتطابق سلوك هذه الوظيفة تقريبًا مع الدالة preg_replace()
، باستثناء أنه يجب تحديد الدالة المُعرَّفة من المستخدم callback
بدلاً من المعامل replacement
.
المعاملات
pattern
النمط المراد البحث عنه. ويمكن أن يكون إما سلسلةً نصيةً أو مصفوفةً من السلاسل النصية.
callback
الدالة المُعرَّفة من المستخدم التي تُستدعى وتُمرِر مصفوفة من العناصر المطابقة في السلسلة النصية الهدف subject
. يجب أن تُعيد الدالة المعرفة من المستخدم سلسلة الاستبدال النصية. هذا هو توقيع الدالة المعرفة من المستخدم:
string handler ( array $matches )
سنحتاج غالبًا إلى دالة callback
لاستخدام الدالة preg_replace_callback()
في مكان واحد فقط. في هذه الحالة، يمكننا استخدام دالة مجهولة لتعريف الدالة المُعرَّفة من المستخدم داخل استدعاء preg_replace_callback()
. بهذه الطريقة يتوفر لدينا كافة المعلومات الخاصة بالاستدعاء في مكان واحد، ولا تسبب الفوضى في أسماء الدوال باستخدام اسم دالة مُعرَّفة من المستخدم تكون غير متواجدة في أي مكان آخر.
المثال 1: مثال على الدالة preg_replace_callback()
ووظيفة مجهولة
<?php
/* مُرشِح من سطر الأوامر بأسلوب يونيكس لتحويل الحروف الكبيرة
* في بداية الفقرات إلى حروف صغيرة */
$fp = fopen("php://stdin", "r") or die("can't read stdin");
while (!feof($fp)) {
$line = fgets($fp);
$line = preg_replace_callback(
'|<p>\s*\w|',
function ($matches) {
return strtolower($matches[0]);
},
$line
);
echo $line;
}
fclose($fp);
?>
subject
السلسلة النصية، أو مصفوفة من السلاسل النصية المراد البحث والاستبدال فيها.
limit
أقصى عدد بدائل ممكنة من كل نمط متواجد في كل سلسلة subject
. قيمته الافتراضية -1 (بلا حدود).
count
إذا حُدِد تصبح قيمة هذا المتغير تساوي عدد عمليات الاستبدال.
القيم المعادة
تُعيد هذه الدالة مصفوفةً إذا كانت المعامل subject
يمثل مصفوفة، أو تُعيد سلسلةً نصية خلاف ذلك. في حالة وجود خطأ تكون القيمة المعادة هي NULL
.
إذا عُثِرَ على تطابقات، تُعاد السلسلة النصية الهدف االجديدة، وإلا تُعاد السلسلة الهدف الأصلية subject
دون تغيير.
سجل التغييرات
الإصدار | وصف |
---|---|
5.1.0 | إضافة المعامل count |
أمثلة
المثال 2: مثال على الدالة preg_replace_callback()
<?php
// اُستُخدِم هذا النص في عام 2002
// نريد أن نحصل على هذا التحديث لعام 2003
$text = "April fools day is 04/01/2002\n";
$text.= "Last christmas was 12/24/2001\n";
// the callback function
function next_year($matches)
{
// كالعادة: $ match [0] هي المطابقة الكاملة
// مع $ match [1] التطابق مع أول نمط فرعي
// مُحاط بالأقواس '(...)' وهلم جرا
return $matches[1].($matches[2]+1);
}
echo preg_replace_callback(
"|(\d{2}/\d{2}/)(\d{4})|",
"next_year",
$text);
?>
سوف تكون مُخرجات المثال أعلاه كالتالي:
April fools day is 04/01/2003
Last christmas was 12/24/2002
المثال 3: مثال على الدالة preg_replace_callback()
باستخدام بنية متكررة لمعالجة رمز BB المغلف
<?php
$input = "plain [indent] deep [indent] deeper [/indent] deep [/indent] plain";
function parseTagsRecursive($input)
{
$regex = '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#';
if (is_array($input)) {
$input = '<div style="margin-left: 10px">'.$input[1].'</div>';
}
return preg_replace_callback($regex, 'parseTagsRecursive', $input);
}
$output = parseTagsRecursive($input);
echo $output;
?>
انظر أيضًا
- أنماط PCRE.
- الدالة
preg_replace_callback_array()
: إجراء بحث عن تعبير نمطي واستبداله باستخدام دالة مُعرّفة من المستخدم. - الدالة
preg_quote()
: اقتباس حروف التعبير النمطي. - الدالة
preg_replace()
البحث عن تعبير نمطي واستبداله. - الدالة
preg_last_error()
: إعادة رمز الخطأ الخاص بتنفيذ آخر PCRE regex. - وظائف مجهولة.
- معلومات حول النوع callback.
مصادر
صفحة الدالة preg_replace_callback في توثيق PHP الرسمي.