w3schools - regular expression php شرح



مطابقة لا حصر لها من سوبكسريسيونس(التعبيرات العادية) ترجع مباراة واحدة فقط (1)

لدي تعبير عادي مثل هذا (مبسط جدا):

^(ab)*$

وأنا ضد هذا:

abababababababab

عند تشغيله من خلال preg_match :

preg_match('/$(ab)*$/', 'abababababababab', $matches);
print_r($matches);

أحصل على هذا:

Array
(
    [0] => abababababababab
    [1] => ab
)

ويراس أتوقع هذا:

Array
(
    [0] => abababababababab
    [1] => ab
    [2] => ab
    [3] => ab
    [4] => ab
    [5] => ab
    [6] => ab
    [7] => ab
    [8] => ab
}

كيف يمكنني الحصول على ما أتوقعه؟

(لاحظ أن التعبير الفرعي يمكن أن يكون أكثر تعقيدا، على سبيل المثال ([aA][bB]) ، وأريد التعبيرات المتطابقة في ترتيبها في هذا الموضوع.)


تفعل ذلك باستخدام preg_match_all مثل هذا:

preg_match_all('/(ab)/', 'abababababababab', $matches);
print_r($matches);

تذكر أن preg_match يوفر فقط المباراة الأولى و preg_match_all لديه نفس الوظيفة، ولكن إرجاع كافة. لاحظ أيضا أنه تم تغيير التعبير العادي الآن. إذا كنت تستخدم العلامة النجمية، فمن المحتمل أن تستهلك السلسلة بأكملها في المطابقة الأولى. هل يمكن، ومع ذلك، في محاولة شيء مثل (ab)*? لجعله نونغريدي.





regex