تصميم موقع الويب الخاص بك مع PHP و MySQL


الدرس: التعبيرات المنتظمة Regular expressions (الجزء 1/2)


الصفحة السابقة
هل حلمت دائمًا بتعلم اللغة الصينية؟
هذا جيد! في هذا الفصل سأعلمك كيفية كتابة شيء مثل هذا:

#(((https?|ftp)://(w{3}\.)?)(?<!www)(\w+-?)*\.([a-z]{2,4}))#

صدقني إذا كنت تريد ، ولكن هذا الكتابة التي لا يمكن قراءتها ... تعني حقا شيئا ما! نعم نعم اقسم بذلك
التعبيرات المنتظمة هي نظام قوي وسريع للغاية للبحث عن النصوص (على سبيل المثال ، الجمل). إنها نوع من وظائف البحث / الاستبدال المتقدمة للغاية ، والتي لن تتمكن من الاستغناء عنها بمجرد معرفة كيفية استخدامها.

تسمح لنا التعبيرات المنتظمة بإجراء عمليات بحث واستبدال شاملة في النصوص. فيما يلي بعض الأمثلة العملية لما يمكنك القيام به.
  • تحقق تلقائيًا مما إذا كان عنوان البريد الإلكتروني الذي أدخله الزائر لديه نموذج صالح (مثل dupont@free.fr ).
  • قم بتعديل تاريخ لديك بالتنسيق الأمريكي (08-05-1985) لوضعه بالترتيب الصحيح باللغة الفرنسية (05/08/1985) .
  • استبدل جميع عناوين "http: //" تلقائيًا بروابط قابلة للنقر ، كما هو الحال في بعض المنتديات.
  • أو حتى إنشاء لغتك المبسطة من HTML ، مثل bbCode الشهير ( [b][/b]...)
افتح أذنيك على نطاق واسع واربط الأحزمة الخاصة بك!

أين تُستخدم regex ؟


POSIX أو PCRE ؟
خبر سار: لن تضطر إلى تنشيط أي شيء للقيام بتعبيرات منتظمة (على عكس مكتبة GD) .
هناك نوعان من التعبيرات المنتظمة ، التي تستجيب إلى أسماء حلوة من:
  • POSIX   : هي لغة تعبير عادية طرحها PHP ، وهي أبسط قليلاً من PCRE (ومع ذلك فهي معقدة للغاية) . ومع ذلك ، فإن عيبها الرئيسي والكبير هو أن هذه "اللغة" أبطأ من PCRE ؛
  • PCRE   : هذه التعبيرات المنتظمة تأتي من لغة أخرى (Perl) . تعتبر أكثر تعقيدًا قليلاً ، فهي رغم كل شيء أسرع وأكثر كفاءة.
PHP لذلك يعرض الاختيار بين POSIX و PCRE . من ناحيتي ، لقد حُسم الأمر و تم الاختيار: سنقوم بدراسة PCRE .
كن مطمئنًا ، إنها ليست أكثر تعقيدًا من POSIX ، ولكنها تتميز بكونها سريعة جدًا. وعلى مستوى PHP ، ما يهمنا هو السرعة.
الوظائف التي تهمنا
لذلك اخترنا PCRE . هناك العديد من الوظائف التي تستخدم " لغة PCRE " ، وكلها تبدأ بـ preg_ :
  • preg_grep  .
  • preg_split  .
  • preg_quote  .
  • preg_match  .
  • preg_match_all  .
  • preg_replace  .
  • preg_replace_callback .
كل وظيفة لها خصوصيتها: البعض يسمح لك ببساطة بالبحث ، والبعض الآخر يبحث ويستبدل ، لكن النقطة المهمة المشتركة هي أنها تستخدم "لغة" متطابقة لإجراء بحث.
بمجرد أن تتعلم لغة PCRE ، ستتمكن من استخدام كل منها دون أي مشكلة.
لتجنب الكثير من الناحية النظرية، سوف نبدأ بالتدريب، واستخدام واحدة من هذه الوظائف preg_match .
preg_match
باستخدام هذه الوظيفة ، ستتمكن من التدرب في نفس الوقت مثلي ورؤية شيئًا فشيئًا إذا كنت قد فهمت مبدأ لغة PCRE .
تحتاج فقط إلى معرفة أن هذه الوظيفة تقوم بإرجاع قيمة منطقية: TRUE أو FALSE . تقوم بإرجاع true (صواب) إذا وجدت الكلمة التي كنت تبحث عنها في العبارة ، false (خطأ) إذا لم تجدها.
يجب أن تعطيه قسمين من المعلومات: التعبير الخاص بك (وهو الاسم الصغير الذي نعطيه لـ "التعبير المنتظم") والعبارة التي تبحث فيها.
فيما يلي على سبيل المثال كيفية استخدامها ، باستخدام شرط if  :

<?php
if (preg_match("** Your REGEX **", " What you are researching "))
{
    echo 'The word you are looking for is in the string';
}
else
{
    echo 'The word you are looking for is not in the chain';
}
?>
بدلاً من "** Your REGEX **" ، سوف تكتب شيئًا بلغة PCRE ، مثل ما عرضته عليك في بداية هذا الفصل:

#(((https?|ftp)://(w{3}\.)?)(?<!www)(\w+-?)*\.([a-z]{2,4}))#
هذا هو بالضبط ما يهمنا ، وهذا هو ما سنركز عليه لاحقًا.

لأنه - إذا لم تكن قد لاحظت - فإن هذا الشيء ليس سهل القراءة ... والصينية تبدو بسيطة جدًا مقارنة به!

عمليات بحث بسيطة


سنبدأ من خلال إجراء بحث بسيط للغاية وأساسي للغاية. عادة ، لا ينبغي أن تواجه الكثير من المتاعب في الوقت الحالي ، بل عندما تخلط كل شيء سيصبح معقدًا.

أول شيء مهم يجب معرفته: إن regex (التعبير المنتظم) محاط دائمًا بأحرف خاصة تسمى المحددات .
يمكنك اختيار أي حرف او رمز خاص كمحدد ، ولتجنب الالتفاف في دوائر لفترة طويلة جدًا ، سأفرض عليك حرفًا واحدًا:رمز #

بعد ذلك ، يحيط # بـ regex من الجهتين، مثل هذا:
#regex#

اه ، ولكن فيما تصلح # ، لأن regex محاطة بعلامات اقتباس في وظيفة PHP على أي حال؟
لأنه إذا كنت تريد ، يمكنك استخدام الخيارات. لن نتحدث عن الخيارات على الفور لأننا لسنا بحاجة إليها للبدء ، ولكن نعلم أن هذه الخيارات يتم وضعها بعد # الثانية ، مثل هذا:

#regex#Options
بدلاً من "ٌRegex" ، يجب أن تضع الكلمة التي تبحث عنها.

دعنا نأخذ مثالا: ترغب في معرفة ما إذا كان المتغير يحتوي على كلمة " "guitare . فقط استخدم regex التالي للقيام بالبحث:
#guitare#

في كود PHP ، فإنه يعطي:

<?php
if (preg_match("#guitare#", "J'aime jouer de la guitare."))
{
    echo 'TRUE';
}
else
{
    echo 'FALSE';
}
?>
إذا قمت بتشغيل هذا الكود ، فسترى أنه يعرض TRUE لأنه تم العثور على كلمة "guitare" في عبارة
"j’aime la guitare. "
تذكر هذا الكود قليلا سنبقيه لفترة من الوقت ، أحيانًا سنُغير regex ، وأحيانًا أخرى سنُغير العبارة التي نبحث عنها.
لكي تفهم كيف يتصرف regex ، سأقدم لك النتائج في جدول ، مثل هذا:
العبارة Regex النتيجة
J'aime jouer de la guitare. #guitare# TRUE
J'aime jouer de la guitare. #piano# FALSE
حسنًا ، هل هذا مفهوم حتى الآن؟ 
وجدنا كلمة "guitare" في الجملة الأولى ، ولكن ليس "piano" في الجملة الثانية.
حتى ذلك الحين كان الأمر سهلاً ، لكنني سأسرع في التعقيد!
وأنت تكسر ، أنت تكسر ، أنت تكسر ...
هناك شيء تحتاج إلى معرفته: regex تُفرّقُ بين الاحرف الكبيرة و الاحرف الصغيرة ؛ يقال أنها "حساسة لحالة الأحرف" . هنا ، انظر إلى هذين regex على سبيل المثال:
العبارة Regex النتيجة
J'aime jouer de la guitare. #Guitare# FALSE
J'aime jouer de la guitare. #GUITARE# FALSE
ماذا لو كنا نرغب في عدم رجوعنا إلى التمييز بين العلوية والسفلية؟
نحن نستخدم خيار . إنه الوحيد الذي ستحتاج إلى تذكره في الوقت الحالي. يجب عليك إضافة الحرف "i" بعد التجزئة الثانية ، ولن يعيد regex الانتباه إلى الحالة:
العبارة Regex النتيجة
J'aime jouer de la guitare. #Guitare#i TRUE
Vive la GUITARE ! #guitare#i TRUE
Vive la GUITARE ! #guitare# FALSE
في المثال الأخير ، لم أضع الخيار "i" لذلك قيل لي FALSE .
ولكن في الأمثلة الأخرى ، يمكنك أن ترى أن "i" أتاحت عدم التمييز بين الاحرف الكبيرة والصغيرة. 
الرمز OR
سنستخدم الآن رمز OR الذي رأيته بالفعل في الفصل الخاص بالشروط: إنه الشريط العمودي "| " .
بفضل ذلك ، سوف تكون قادرًا على ترك العديد من الاحتمالات إلى regex الخاص بك. لذلك إذا كتبت:
#guitare|piano#
... هذا يعني أنك تبحث عن كلمة "guitare" أو كلمة "piano " . إذا تم العثور على واحدة من الكلمتين ، فإن regex يجيب بـ TRUE .
هذه بعض الأمثلة :
العبارة regex النتيجة
J'aime jouer de la guitare. #guitare|piano# TRUE
J'aime jouer du piano. #guitare|piano# TRUE
J'aime jouer du banjo. #guitare|piano# FALSE
J'aime jouer du banjo. #guitare|piano|banjo# TRUE
في المثال الأخير ، أضع الشريط العمودي مرتين. هذا يعني أننا نبحث عن guitare أو piano أو banjo .
هل ما زلت تتبعني؟
ممتاز!
يمكننا الآن رؤية المشاكل في بداية ونهاية العبارة ، ومن ثم يمكننا التحرك صعوداً.
بداية ونهاية العبارة
تسمح regex أن تكون دقيقًا جدًا ، وسوف تدرك ذلك قريبًا.
حتى الآن في الواقع يمكن العثور على الكلمة في أي مكان. لكن لنفترض أننا نريد أن تبدأ الجملة أو تنتهي بهذه الكلمة. سنحتاج إلى الرمزين التاليين ، تذكرهم:
  • ^(قبعة): يشير إلى بداية العبارة ؛
  • $(الدولار): يشير إلى نهاية العبارة.
لذلك ، إذا كنت تريد أن تبدأ العبارة بـ "Hello" ، فسيتعين عليك استخدام regex :
#^Hello#
إذا وضعت الرمز "  ^ " أمام الكلمة ، فيجب أن تكون هذه الكلمة في بداية العبارة ، وإلا سيتم إرجاع FALSE .
وبالمثل ، إذا أردنا التحقق من أن العبارة تنتهي بـ "zero" ، فسوف نكتب هذا regex :
#zero$#
هل فهمت؟ فيما يلي العبارة من الاختبارات بحيث يمكنك معرفة كيفية عملها:
العبارة regex النتيجة
Bonjour petit zero #^Bonjour# TRUE
Bonjour petit zero #zero$# TRUE
Bonjour petit zero #^zero# FALSE
Bonjour petit zero !!! #zero$# FALSE
بسيط ، أليس كذلك؟
في الحالة الأخيرة لا تعمل ، لأن العبارة لا تنتهي بـ "zero" ولكن مع "!!! ". حتما ، لهذا قيل لنا FALSE ...

فئات الأحرف


حتى الآن ، لقد تمكنت من إجراء بعض الأبحاث البسيطة إلى حد ما ، ولكن لا يوجد شيء غير عادي حقًا.  أداة البحث في word تفعل كل هذا بشكل جيد.
لكن كن مطمئنًا ، أن regex أكثر ثراءً (وأكثر تعقيدًا) من أداة البحث عن الكلمات ، كما سترى.
بفضل فئات الأحرف المسماة ، يمكن أن تكون إمكانيات البحث متنوعة إلى حد كبير.
كل شيء يدور حول ااأقواس المربعة. نضع فئة حرف بين قوسين مربعين في regex .
هذا يسمح لنا باختبار الكثير من إمكانيات البحث في نفس الوقت ، بينما نكون دقيقين للغاية.
فصول بسيطة
دعنا لا ندور في دوائر أكثر من ذلك ، ودعونا ننظر بعناية في هذا regex :

#gr[io]s#
في الأقواس المربعة ، وهذا ما يسمى فئة الحرف. هذا يعني أن واحدة من الحروف في الداخل قد تكون مناسبة.

في هذه الحالة ، يتعرف regex على كلمتين: "gris" و gros"" . يشبه إلى حد ما OR التي تعلمناها في وقت سابق ، إلا أنه ينطبق هنا على حرف واحد وليس على كلمة .
الى جانب ذلك ، إذا وضعت عدة حروف مثل هذا:

#gr[ioa]s#
هذا يعني "i" أو "o" أو a"". لذلك يعرف regex لدينا الكلمات "gris" ، "gros" و ""gras !

هيا ، دعنا نتلقى بعض الأمثلة:
العبارة regex النتيجة
La nuit, tous les chats sont gris #gr[aoi]s# TRUE
Berk, c'est trop gras comme nourriture #gr[aoi]s# TRUE
Berk, c'est trop gras comme nourriture #gr[aoi]s$# FALSE
Je suis un vrai zéro #[aeiouy]$# TRUE
Je suis un vrai zéro #^[aeiouy]# FALSE
أعتقد أنك تفهم أول اثنين regex . لكنني أعتقد أنك ستحتاج إلى بعض التفسير في الثلاثة الأخيرة.
  • بالنسبة لـ Berk, c'est trop gras comme nourriture "    "لقد استخدمت هذه المرة regex  #gr[aoi]s$# . إذا اتبعت ما أخبرتك به سابقًا ، فهذا يعني أن سلسلتنا يجب أن تنتهي بـ "gris" أو "gras" أو ""gros . لكن هنا الكلمة في المنتصف ، لذلك الجواب كان FALSE . حاول وضعه في النهاية وسترى أنه يعمل.
  • ثم " Je suis un vrai zéro " مع regex  #[aeiouy]$# . هذا يعني أنه يجب أن تنتهي regex بحرف متحرك( vowel) بمعنى انه يكون احد الاحرف التالية (aeiouy) . هذا جيد ، والحرف الأخير في العبارة هو الحرف "o" ، لذلك يتم الرد علينا TRUE .
  • وأخيرا ، نفس العبارة ولكن مع regex  #^[aeiouy]# . هذه المرة ، يجب أن تبدأ العبارة بحرف متحرك (و في الحروف الصغيرة ، كذلك). ومع ذلك تبدأ العبارة بـ "J" ، وبالتالي فإن الجواب هو FALSE !
أنا بخير ، ما زلت لم أفقدك في الطريق؟
إذا شعرت في مرحلة ما بأنك قد تُهت ، لا تتردد في إعادة قراءة ما سبق ، فلن يؤذيك ذلك.
فترات الفئة
ابتداءا من هذه اللحظة ستبدأ الفئات في خداعك.

باستخدام الرمز "  - " (الشرطة) ، يمكنك قَبولُ مجموعة كاملة من الأحرف.
على سبيل المثال ، في وقت سابق استخدمنا الفئة [aeiouy] . حسنًا ، لم يمض وقت طويل.

ولكن ماذا تقول عن الفئة [abcdefghijklmnopqrstuvwxyz]  ؟ كل هذا لتقوله أنك تريد أن يكون هناك حرف؟
لدي ما هو أفضل! 

لديك الحق في الكتابة [a-z] : ! أعترف أنه أقصر! وإذا كنت تريد أن تتوقف عند الحرف "e"، لا مشكلة من وضع: [a-e] .
وبالإضافة إلى ذلك، كما أنها تعمل مع الأرقام: [0-9] . إذا كنت تريد رقما بين 1 و 8، اكتب: [1-8] .

أفضل بكثير ! يمكنك كتابة مسارين في وقت واحد في فئة [a-z0-9] . وهذا يعني "أي حرف (أحرف صغيرة) أو رقم" .
بالطبع ، يمكنك أيضًا تفويض الحروف الكبيرة دون المرور على الخيارات كما فعلنا سابقًا. ذلك أن: [a-zA-Z0-9] . لذلك فهي طريقة أقصر لكتابة:

[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789].
لنقم ببعض الاختبارات ، أليس كذلك؟
العبارة regex النتيجة
Cette phrase contient une lettre #[a-z]# TRUE
cette phrase ne comporte ni majuscule ni chiffre #[A-Z0-9]# FALSE
Je vis au 21e siècle #^[0-9]# FALSE
<h1>Une balise de titre HTML</h1> #<h[1-6]># TRUE
المثال الأخير مثير للاهتمام بشكل خاص لأننا نتحرك ببطء نحو الممارسة. نحن نتحقق مما إذا كانت العبارة تحتوي على علامة عنوان HTML (  <h1>أو <h2>، إلخ ، حتى <h6> ) .
وتقول أنني لا أريد ذلك؟
إذا كنت لا تريد أحرفًا تدرجها في صفك ، فستحتاج إلى وضع الرمز "  ^ " في بداية الفصل.
لكن؟ اعتقدت أن هذا الرمز كانت تستخدم للإشارة إلى بداية العبارة؟
نعم ، ولكن إذا وضعته داخل الفئة ، فإنه يستخدم ليقول إنك لا تريد ما هو داخل هذه الفئة.
لذلك ، regex التالية:
#[^0-9]#
... يعني أنك تريد أن تحتوي العبارة على حرف واحد على الأقل ليس رقمًا.
الآن يمكنني تسخين دماغك (الجدول التالي).
العبارة regex النتيجة
Cette phrase contient autre chose que des chiffres #[^0-9]# TRUE
cette phrase contient autre chose que des majuscules et des chiffres #[^A-Z0-9]# TRUE
Cette phrase ne commence pas par une minuscule #^[^a-z]# TRUE
Cette phrase ne se termine pas par une voyelle #[^aeiouy]$# FALSE
ScrrmmmblllGnngngnngnMmmmmffff #[^aeiouy]# TRUE
أنصحك بأخذ استراحة قصيرة لأنها لن تنجح بعد ذلك! سنكتشف الآن دور الكميّات التي ستتيح لنا إدارة التكرار.
الكميّات Quantifiers
تعتبر Quantifiers رمزا يستخدم لمعرفة عدد المرات التي يمكن أن يكرر فيها حرف أو مجموعة من الأحرف.
على سبيل المثال ، للتعرف على عنوان بريد إلكتروني مثل francois@free.fr، يجب عليك أن تقول: "إنه يبدأ بحرف واحد أو أكثر ، متبوعًا بـ (  علامة @ ) ، متبوعًا بحرفين على الأقل ، متبوعًا بـ نقطة، ثم 2-4 الحروف (ل .fr، .com ولكن أيضا .info (.
جيد: في الوقت الحالي ، لا يتمثل هدفنا في كتابة regex والذي يسمح بمعرفة ما إذا كان عنوان البريد الإلكتروني الذي أدخله الزائر لديه النموذج الصحيح (ما زال الوقت مبكرًا جدًا). ولكن كل ذلك لإخبارك أنه من الضروري معرفة كيفية الإشارة إلى عدد المرات التي يمكن أن تكرر فيها الرسالة نفسها!
الرموز الأكثر شيوعا
هناك ثلاثة رموز لتذكرها:
  • ? (علامة استفهام): يشير هذا الرمز إلى أن الرسالة اختيارية. يمكن أن يكون هناك 0 أو 1 مرة .
    وبالتالي ،   #a?# تعترف 0 أو 1 "a" ؛
  • + (علامة زائد): الرسالة إجبارية. يمكن أن تظهر 1 مرات أو أكثر .
    وبالتالي ،  #a+# يتعرف على "a" ، "aa" ، "aaa" ، "aaaa" ، إلخ. .
  • * (نجمة): الرسالة اختيارية. يمكن أن تظهر مرات 0 أو 1 أو أكثر .
    وبالتالي ، #a*# يتعرف على "a" ، "aa" ، "aaa" ، "aaaa" ، إلخ. ولكن إذا لم يكن هناك "a" ، فهذا يعمل أيضًا!
لاحظ أن هذه الرموز تنطبق على الرسالة مباشرة في المقدمة. يمكننا إذن تخويل كلمة "chien" ، سواء في صيغة المفرد كما هو الحال في صيغة الجمع ، مع regex  #chiens?# (ستعمل من أجل "chien" و ""chiens ) .
يمكنك إذن تكرار خطاب. أنا فقط أظهر لك حالة ""chien . ولكن يمكننا أيضًا استخدامه لحرف في منتصف الكلمة ، مثل هذا:
#bor?is#
سوف يتعرف هذا الرمز على "boris" و " bois " !
وإذا أردت تكرار حرفين أو أكثر ، كيف أفعل ذلك؟
يجب استخدام الأقواس. على سبيل المثال ، إذا كنت تريد التعرف على "Ayayayayayay" (صرخة الحرب لـ Speedy Gonzales! ) ، فسيتعين عليك كتابة regex التالي:
#Ay(ay)*#
سيتعرف هذا الرمز على "Ay" ، "Ayay" ، "Ayayay" ، "Ayayayay" ، "Ouïe Aïe Aïe" (لا ، أنا أlمزح بالنسبة لآخر واحدة) .
يمكنك استخدام الرمز "|" بين قوسين . سيُرجع regex  #Ay(ay|oy)*#صحيحًا على سبيل المثال لـ "Ayayayoyayayayoyoyoyoyoyoy" ! إنه "ay" أو "oy" يتكرر عدة مرات ، بكل بساطة!
خبر جيد آخر: يمكنك وضع الكميات بعد فئة الحرف (كما تعلمون ، مع الأقواس المربعة!). وبالتالي #[0-9]+# يسمح بالتعرف على أي رقم ، طالما كان هناك رقم واحد على الأقل!
دعونا نقوم ببعض الاختبارات (الجدول التالي).
العبارة regex النتيجة
EEEEE #e+# TRUE
ooo #u?# TRUE
magnifique #[0-9]+# FALSE
Yahoooooo #^Yaho+$# TRUE
Yahoooooo c'est génial ! #^Yaho+$# FALSE
Blablablablabla #^Bla(bla)*$# TRUE
الأمثلة الأخيرة مثيرة للاهتمام للغاية.  #^Yaho+$# يعني regex  أن العبارة يجب أن تبدأ وتنتهي بكلمة "Yahoo" . قد يكون هناك واحد أو أكثر من ""o .  هكذا "Yaho" ، "Yahoo" ، "Yahoo" ، إلخ.   ... ولكن يجب ألا تضع أي شيء قبل أو بعد ، لأنني أشرت إلى أن بداية ونهاية العبارة تكون مع ^و $ .
أخيرًا ، يصرح آخر regex بالكلمات "Bla" ، "Blabla" ، "Blablabla" ، إلخ. لقد استخدمت الأقواس للإشارة إلى أنه يمكن تكرار "bla" 0 أو 1 أو أكثر من المرات.
إنها تبدأ في إيذاء رأسك ، أليس كذلك؟
كن أكثر دقة بفضل الأقواس
نود في بعض الأحيان الإشارة إلى أنه يمكن تكرار الرسالة أربع مرات أو أربع إلى ست مرات ... باختصار ، نود أن نكون أكثر دقة في عدد التكرارات.
هذا هو المكان الذي تأتي فيه الأقواس. سترى: إذا كنت قد فهمت الأمثلة الأخيرة ، فسيبدو الأمر بسيطًا جدًا بالنسبة لك.
هناك ثلاث طرق لاستخدام الأقواس.
  • {3}  : إذا وضعت رقمًا ، فهذا يعني أنه يجب تكرار الحرف (أو مجموعة الحروف إذا كان بين قوسين) 3 مرات بالضبط . #a{3}# تعمل مع العبارة "aaa" .
  • {3,5}  : هنا ، لدينا العديد من الاحتمالات. يمكننا الحصول على الرسالة 3 إلى 5 مرات . #a{3,5}# تعمل مع "aaa" ، "aaaa" ، "aaaaa" .
  • {3,}  : إذا وضعت فاصلة ، ولكن ليس الرقم الثاني ، فهذا يعني أنه يمكن أن يكون هناك ما لا نهاية. هنا يعني "  3 مرات أو أكثر  ". #a{3,}# تعمل مع "aaa" ، "aaaa" ، "aaaaa" ، "aaaaaa" ، إلخ. لن أكتبهم جميعًا ، سيكون طويلاً بعض الشيء.
إذا كنت مهتم ، ستلاحظ ما يلي:
  • ? يكافئ الكتابة {0،1} ؛
  • + يكافئ الكتابة {1 ،} ؛
  • * يكافئ الكتابة }0 ،{ .
نقدم بعض الأمثلة ، فقط لنخبر أنفسنا بأننا مستعدون (الجدول التالي)؟
العبارة regex النتيجة
EEEEE #e{2,}# TRUE
blablablabla #^Bla(bla){4}$# FALSE
546781 #^[0-9]{6}$# TRUE
هيا ، دعنا نتوقف عند هذا الحد وننهي فترة راحة جيدة لأن ... في الفصل التالي ، سنخلط كل شيء تعلمناه للتو!

في الخلاصة


  • التعبيرات المنتظمة هي أدوات بحث واستبدال نصية متقدمة للغاية تتيح لك إجراء عمليات بحث دقيقة للغاية ، على سبيل المثال للتحقق من أن النص الذي أدخله المستخدم يتوافق مع شكل عنوان بريد إلكتروني أو رقم الهاتف.
  • تقوم الدالة preg_match بالتحقق مما إذا كان النص يطابق النموذج الموصوف بالتعبير المنتظم.
  • يتم تحديد تعبير منتظم بواسطة رمز (على سبيل المثال حاد # ) .
  • تسمح فئات الأحرف لعدد كبير من الرموز (الحروف والأرقام) في فترة .
  • تسمح لك Quantifiers بتكرار عبارة من النص لعدد معين من المرات.