الدالة preg_split()‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ في PHP

من موسوعة حسوب
< PHP

(PHP 4, PHP 5, PHP 7)

تُقسِّم الدالة preg_split()‎‎‎ سلسلة نصية باستخدام التعبير النمطي.

الوصف

array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )

تُقسِّم هذه الدالة السلسلة النصية المعطاة باستخدام تعبير نمطي.

المعاملات

pattern

النمط المراد البحث عنه، كسلسلة نصية.

subject

السلسلة النصية المُدخلة.

limit

إذا تم تحديد هذا المعامل، فستُعاد السلاسل النصية الفرعية فقط حتى limit، مع ترك باقي السلسلة النصية لتُوضَع في السلسلة النصية الفرعية الأخيرة. وعندما يكون المعامل limit يساوي ‎-1، أو 0 أو NULL فإنه يعني أنه "بلا حدود"، وكما هو الحال دائما في PHP، يمكننا استخدام NULL للتخطي إلى المعامل flags.

flags

يمكن أن يكون أي مزيج من الرايات التالية (مُجمَّعة باستخدام المعامل الثنائي |):

  • PREG_SPLIT_NO_EMPTY: إذا ضُبِطت هذه الراية، فستُعاد القطع غير الفارغة فقط بواسطة الدالة preg_split()‎‎‎.
  • PREG_SPLIT_DELIM_CAPTURE: إذا ضُبِطت هذه الراية، سيُلتَقط التعبير المُحاط بالقوسين في النمط المُحدِد ويُعيده أيضًا.
  • PREG_SPLIT_OFFSET_CAPTURE: إذا ضُبِطت هذه الراية، فستُعاد أيضًا إزاحة السلسلة المُذيّلة لكل مطابقة. لاحظ أن هذا يغير القيمة المُعادة في مصفوفةٍ ما حيث يكون كل عنصر هو مصفوفة تتكون من سلسلة مطابِقة عند الفهرس 0 وإزاحة سلسلتها النصية في subject عند الفهرس 1.

القيم المعادة

تُعيد هذه الدالة مصفوفة تحتوي على سلاسل نصية فرعية من تقسيم subject على طول الحدود المتطابقة مع pattern، أو FALSE عند الفشل.

أمثلة

المثال 1: مثال على الدالة preg_split()‎‎‎: الحصول على أجزاء من سلسلة بحث

تقسّيم العبارة بأي عدد من حروف الفاصلات المسافات،  والتي تتضمن ‎\r, ‎\t, \n‎ و ‎\f

<?php
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
print_r($keywords);
?>

سوف تكون مُخرجات المثال أعلاه كالتالي:

Array
(
    [0] => hypertext
    [1] => language
    [2] => programming
)

المثال 2: مثال على تقسيم سلسلة نصية إلى الحروف المكوِّنة

<?php
$str = 'string';
$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);
?>

سوف تكون مُخرجات المثال أعلاه كالتالي:

Array
(
    [0] => s
    [1] => t
    [2] => r
    [3] => i
    [4] => n
    [5] => g
)

المثال 3: تقسيم سلسلة نصية إلى مطابقات ومعرفة إزاحتها

<?php
$str = 'hypertext language programming';
$chars = preg_split('/ /', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($chars);
?>

سوف تكون مُخرجات المثال أعلاه كالتالي:

Array
(
    [0] => Array
        (
            [0] => hypertext
            [1] => 0
        )

    [1] => Array
        (
            [0] => language
            [1] => 10
        )

    [2] => Array
        (
            [0] => programming
            [1] => 19
        )

)

ملاحظات

نصيحة: إذا كنا لسنا بحاجة إلى قوة التعبيرات النمطية، فيمكننا اختيار بدائل أسرع (وإن كانت أبسط) مثل explode()‎‎‎ أو str_split()‎‎‎.

نصيحة: إذا فشلت المطابقة، فستُعاد مصفوفة ذات عنصر واحد يحتوي على السلسلة النصية المُدخلة.

انظر أيضًا

مصادر