أصل هذه المقالة
هنا . ربما لا يوجد شيء اسمه الكثير من النظرية، وسأقدم عدة روابط لمواد أكثر تفصيلاً حول التعبير العادي في نهاية المقالة. ولكن يبدو لي أن البدء في الخوض في موضوع مثل التعبيرات العادية سيكون أكثر إثارة للاهتمام إذا كانت هناك فرصة ليس فقط للحشو، ولكن أيضًا لتوحيد المعرفة على الفور من خلال إكمال المهام الصغيرة على طول الطريق.
هيا بنا نبدأ. عادةً ما يستشهد معارضو استخدام التعبيرات العادية ('RegEx' أو ببساطة 'regex') في البرمجة بالاقتباس التالي المنسوب إلى Jamie Zawinski:
"بعض الأشخاص، عندما يواجهون مشكلة، يفكرون،" أعرف، سأستخدم التعبيرات العادية .'" الآن لديهم مشكلتين". في الواقع، استخدام التعبيرات العادية ليس فكرة جيدة أو سيئة بعد. وهذا في حد ذاته لن يضيف مشاكل ولن يحل أياً منها. إنها مجرد أداة. وكيفية استخدامه (صواب أم خطأ) تحدد النتائج التي ستراها. إذا حاولت استخدام regex، على سبيل المثال، لإنشاء محلل HTML، فمن المرجح أن
تواجه الألم . ولكن إذا كنت تريد فقط استخراج الطوابع الزمنية من بعض الصفوف، على سبيل المثال، فمن المحتمل أن تكون على ما يرام. لتسهيل إتقان التعبيرات العادية، قمت بتجميع هذا الدرس الذي سيساعدك على إتقان التعبيرات العادية من الصفر في عشرين خطوة قصيرة فقط. يركز هذا البرنامج التعليمي بشكل أساسي على المفاهيم الأساسية للتعبيرات العادية ويتعمق في موضوعات أكثر تقدمًا عند الضرورة فقط.
الخطوة 1: لماذا نستخدم التعبيرات العادية
تُستخدم التعبيرات العادية للبحث عن التطابقات في النص باستخدام أنماط (أنماط) محددة. باستخدام regex، يمكننا بسهولة وببساطة استخراج
الكلمات من النص، بالإضافة إلى الأحرف الحرفية والفوقية الفردية وتسلسلاتها التي تستوفي معايير معينة. إليك ما تخبرنا به
ويكيبيديا عنها: التعبيرات العادية هي لغة رسمية للبحث عن السلاسل الفرعية في النص ومعالجتها، استنادًا إلى استخدام الأحرف الأولية (أحرف البدل). للبحث، يتم استخدام سلسلة عينة (نمط إنجليزي، يُطلق عليه غالبًا باللغة الروسية "القالب"، "القناع")، يتكون من رموز ورموز تعريفية ويحدد قاعدة البحث. لمعالجة النص، يتم تحديد سلسلة بديلة بالإضافة إلى ذلك، والتي يمكن أن تحتوي أيضًا على أحرف خاصة. يمكن أن يكون النمط بسيطًا مثل الكلمة
dog
الموجودة في هذه الجملة:
الثعلب البني السريع يقفز فوق الكلب الكسول.
يبدو هذا التعبير العادي كما يلي:
كلب
...سهل بما فيه الكفاية، أليس كذلك؟ يمكن أن يكون النمط أيضًا أي كلمة تحتوي على الحرف
o
. قد يبدو التعبير العادي للعثور على مثل هذا النمط كما يلي:
\ رائع * _
(
يمكنك تجربة هذا التعبير العادي هنا .) ستلاحظ أنه عندما تصبح متطلبات "المطابقة" أكثر تعقيدًا، يصبح التعبير العادي أيضًا أكثر تعقيدًا. هناك أشكال إضافية من التدوين لتحديد مجموعات من الأحرف ومطابقة الأنماط المتكررة، والتي سأشرحها أدناه. ولكن، بمجرد أن نجد تطابقًا مع نمط ما في بعض النصوص، فماذا يمكننا أن نفعل به؟ تتيح لك محركات التعبير العادي الحديثة استخراج الأحرف أو تسلسلات الأحرف (سلاسل فرعية) من النص المضمن، أو إزالتها، أو استبدالها بنص آخر. بشكل عام، تُستخدم التعبيرات العادية لتحليل النص ومعالجته. يمكننا، على سبيل المثال، استخراج سلاسل فرعية تشبه عناوين IP ثم محاولة التحقق منها. أو يمكننا استخراج الأسماء وعناوين البريد الإلكتروني وتخزينها في قاعدة بيانات. أو استخدم التعبيرات العادية للعثور على معلومات حساسة (مثل أرقام جواز السفر أو أرقام الهواتف) في رسائل البريد الإلكتروني وتنبيه المستخدم بأنه قد يعرض نفسه للخطر. Regex هي حقًا أداة متعددة الاستخدامات يسهل تعلمها ولكن يصعب إتقانها:
"مثلما يوجد فرق بين تشغيل مقطوعة موسيقية جيدًا وإنشاء الموسيقى، هناك فرق بين معرفة التعبيرات العادية وفهمها." - جيفري إي إف فريدل، إتقان التعبيرات المنتظمة
الخطوة 2: بين قوسين مربعين[]
أبسط التعبيرات العادية التي يسهل فهمها هي تلك التي تبحث ببساطة عن تطابق حرف بحرف بين نمط التعبير العادي والسلسلة المستهدفة. دعونا، على سبيل المثال، نحاول العثور على قطة:
النمط: قطة
السلسلة: تم قطع القطة عندما ركضت تحت السيارة.
التطابقات: ^^^
(
كيف يتم ذلك عمليا - انظر هنا )
ملحوظة! يتم عرض كافة الحلول هنا كحلول ممكنة فقط. في التعبيرات العادية، كما هو الحال في البرمجة بشكل عام، يمكنك حل نفس المشكلات بطرق مختلفة. ومع ذلك، بالإضافة إلى المقارنة الصارمة لكل حرف على حدة، يمكننا أيضًا تحديد التطابقات البديلة باستخدام الأقواس المربعة:
النمط: كاليفورنيا [ر]
السلسلة: تم قطع القطة عندما ركضت تحت السيارة.
التطابقات: ^^^ ^^^
(
كيف يعمل ) إن فتح وإغلاق الأقواس المربعة يخبر محرك التعبير العادي بأنه يجب أن يطابق أيًا من الأحرف المحددة، ولكن حرفًا واحدًا فقط. لن يجد التعبير النمطي أعلاه، على سبيل المثال،
cart
الكلمة بأكملها، بل سيجد جزءًا منها فقط:
النمط: كاليفورنيا [ر]
السلسلة: تم قطع القطة عندما كانت تجري تحت العربة.
التطابقات: ^^^ ^^^
(
كيف يعمل ) عند استخدام الأقواس المربعة، فإنك تطلب من محرك التعبير العادي أن يطابق حرفًا واحدًا فقط من الأحرف الموجودة داخل الأقواس. يعثر المحرك على الحرف
c
ثم الحرف
a
، ولكن إذا لم يكن الحرف التالي هو
r
أو
t
فإن هذه ليست تطابقًا كاملاً. إذا وجد
ca
، ثم إما
r
، أو
t
، فإنه يتوقف. لن يحاول مطابقة المزيد من الأحرف لأن الأقواس المربعة تشير إلى أنه يجب مطابقة حرف واحد فقط من الأحرف المضمنة. عندما يجد
ca
، فإنه يجد
r
في الكلمة التالية
cart
، ويتوقف لأنه وجد بالفعل تطابقًا للتسلسل
car
.
أهداف التدريب:
اكتب تعبيرًا عاديًا يطابق جميع الأنماط العشرة
had
في
Had
هذا المقتطف من التورية غير القابلة للترجمة باللهجة المحلية:
نمط:
السلسلة: جيم، حيث كان لدى بيل "كان" ، كان لديه "كان لديه" . "كان" قد كان صحيحا.
المباريات: ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^
(
انظر الحل المحتمل هنا ) ماذا عن جميع أسماء الحيوانات في الجملة التالية؟
نمط:
السلسلة: دخل خفاش وقطة وفأر إلى الحانة...
التطابقات: ^^^ ^^^ ^^^
(
الحل المحتمل ) أو حتى أبسط: ابحث عن الكلمات
bar
أو
bat
:
نمط:
السلسلة: دخل خفاش وقطة وفأر إلى الحانة...
التطابقات: ^^^ ^^^
(
الحل المقترح ) لقد تعلمنا الآن كيفية كتابة تعبيرات عادية أكثر أو أقل تعقيدًا، ونحن فقط في الخطوة 2! فلنكمل!
الخطوة 3: تسلسل الهروب
في الخطوة السابقة، تعرفنا على الأقواس المربعة
[]
وكيف تساعدنا في العثور على تطابقات بديلة باستخدام محرك regex. ولكن ماذا لو أردنا العثور على التطابقات على شكل أقواس مربعة مفتوحة ومغلقة نفسها
[]
؟ عندما أردنا العثور على تطابق حرف بحرف في الكلمة
cat
، قمنا بتزويد محرك regex بتسلسل الأحرف هذا (
cat
). دعونا نحاول العثور على الأقواس المربعة
[]
بنفس الطريقة:
النمط: []
السلسلة: لا يمكنك مطابقة [] باستخدام التعبير العادي! سوف تندم على هذا!
اعواد الكبريت:
(
دعونا نرى ما حدث ) ومع ذلك، لم ينجح شيء ما... وذلك لأن الأحرف ذات الأقواس المربعة تعمل كأحرف محرك regex خاصة تستخدم عادةً للإشارة إلى شيء آخر، وليست نمطًا حرفيًا لمطابقتها بنفسها. كما نتذكر من الخطوة 2، يتم استخدامها للعثور على مطابقات بديلة حتى يتمكن محرك regex من مطابقة أي من الأحرف الموجودة بينها. إذا لم تضع أي أحرف بينهما، فقد يتسبب ذلك في حدوث خطأ. لمطابقة هذه الأحرف الخاصة، يجب علينا الهروب منها عن طريق وضع حرف مائل عكسي عليها قبلها
\
. الخط المائل العكسي (أو الخط المائل العكسي) هو حرف خاص آخر يخبر محرك regex بالبحث عن الحرف التالي حرفيًا، بدلاً من استخدامه كحرف تعريفي. سيبحث محرك regex فقط عن الأحرف
[
وبالمعنى
]
الحرفي إذا كانت
كلاهما مسبوقة بشرطة مائلة عكسية:
نمط: \[\]
السلسلة: لا يمكنك مطابقة [] باستخدام regex! سوف تندم على هذا!
التطابقات: ^^
(
دعونا نرى ما حدث هذه المرة ) حسنًا، ماذا لو أردنا العثور على الشرطة المائلة العكسية نفسها؟ الجواب بسيط. نظرًا لأن الشرطة المائلة العكسية
\
هي أيضًا شخصية خاصة، فيجب أيضًا الهروب منها. كيف؟ شرطة مائلة عكسية!
نمط: \\
السلسلة: C:\Users\Tanja\Pictures\Dogs
المباريات: ^ ^ ^ ^
(
نفس المثال عمليًا ) يجب أن تكون الأحرف الخاصة فقط مسبوقة بشرطة مائلة عكسية. يتم تفسير كافة الأحرف الأخرى حرفيًا بشكل افتراضي. على سبيل المثال، يتطابق التعبير العادي
t
حرفيًا مع
t
الأحرف الصغيرة فقط:
نمط: ر
السلسلة: tttt
المباريات: ^ ^ ^ ^
(
مثال ) ومع ذلك،
\t
يعمل هذا التسلسل بشكل مختلف. إنه قالب للبحث عن حرف علامة التبويب:
النمط: \ر
السلسلة: tttt
المباريات: ^ ^ ^
(
مثال ) تتضمن بعض تسلسلات الهروب الشائعة
\n
(فواصل الأسطر بنمط UNIX) و
\r
(المستخدمة في فواصل الأسطر بنمط Windows
\r\n
).
\r
هو حرف "سطر إرجاع"
\n
وهو حرف "تغذية سطر"،
وكلاهما تم تعريفهما جنبًا إلى جنب مع معيار ASCII عندما كانت أجهزة المبرقة الكاتبة لا تزال قيد الاستخدام على نطاق واسع. سيتم تغطية تسلسلات الهروب الشائعة الأخرى لاحقًا في هذا البرنامج التعليمي.
في هذه الأثناء، دعونا ندمج المادة ببعض الألغاز البسيطة:
حاول كتابة تعبير عادي للعثور على... تعبير عادي؛) يجب أن تكون النتيجة شيء من هذا القبيل:
نمط:
السلسلة: ... هل تريد مطابقة هذا التعبير العادي ` \[\] ` مع التعبير العادي؟
التطابقات: ^^^^
(
الحل ) هل تمكنت؟ أحسنت! حاول الآن إنشاء تعبير عادي للبحث عن تسلسلات الهروب مثل هذا:
نمط:
السلسلة: ` \r `، ` \t `، و ` \n ` كلها تسلسلات هروب regex.
التطابقات: ^^ ^^ ^^
(
حل )
الخطوة 4: ابحث عن حرف "أي" باستخدام نقطة.
عند كتابة حلول مطابقة تسلسل الهروب التي رأيناها في الخطوة السابقة، ربما تساءلت، "هل يمكنني مطابقة حرف الشرطة المائلة العكسية ثم أي حرف آخر يتبعه؟"... بالطبع يمكنك ذلك! هناك حرف خاص آخر يستخدم لمطابقة أي حرف (تقريبًا) - حرف النقطة (النقطة). وإليك ما يفعله:
نمط: .
السلسلة: أنا آسف، ديف. أخشى أنني لا أستطيع أن أفعل ذلك.
التطابقات: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(
مثال ) إذا كنت تريد فقط مطابقة الأنماط التي تبدو مثل تسلسلات الهروب، فيمكنك القيام بشيء مثل هذا:
نمط: \\.
السلسلة: مرحبًا Walmart، حفيدي هناك واسمه " \n \r \t ".
التطابقات: ^^ ^^ ^^
(
مثال ) وكما هو الحال مع جميع الأحرف الخاصة، إذا كنت تريد مطابقة حرف
.
، فأنت بحاجة إلى أن يسبقه حرف
\
:
نمط: \.
السلسلة: الحرب هي السلام . الحرية هي العبودية . الجهل قوة .
المباريات: ^ ^ ^
(
مثال )
الخطوة 5: نطاقات الأحرف
ماذا لو لم تكن بحاجة إلى أي رموز، ولكنك تريد فقط العثور على الحروف في النص؟ أو أرقام؟ أو حروف العلة؟ البحث حسب فئات الشخصيات ونطاقاتها سيسمح لنا بتحقيق ذلك.
` \n `، ` \r `، و ` \t ` هي أحرف مسافة بيضاء، ` \. ` و ` \\ ` و ` \[ ` ليست كذلك .
تعتبر الأحرف "مسافة بيضاء"
إذا لم تقم بإنشاء علامة مرئية في النص. المسافة "
" هي مسافة أو فاصل أسطر أو علامة تبويب. لنفترض أننا نريد العثور على تسلسلات الهروب التي تمثل أحرف المسافات البيضاء فقط
\n
،
\r
وفي
\t
المقطع أعلاه، ولكن ليس تسلسلات الهروب الأخرى. كيف يمكن أن نفعل ذلك؟
النمط: سلسلة \\[nrt]
: ` \n ` و ` \r ` و ` \t ` هي أحرف مسافة بيضاء، ` \. ` و ` \\ ` و ` \[ ` ليست كذلك .
التطابقات: ^^ ^^ ^^
(
مثال ) نجح هذا، لكنه ليس حلاً أنيقًا للغاية. ماذا لو احتجنا لاحقًا إلى مطابقة تسلسل الهروب لحرف "تغذية النموذج"
\f
؟ (يُستخدم هذا الرمز للإشارة إلى فواصل الصفحات في النص.)
النمط: سلسلة \\[nrt]
: ` \n `، ` \r `، ` \t `، و ` \f ` هي أحرف مسافة بيضاء، ` \. ` و ` \\ ` و ` \[ ` ليست كذلك .
التطابقات: ^^ ^^ ^^
(
الحل غير فعال ) باستخدام هذا الأسلوب، نحتاج إلى إدراج كل حرف صغير نريد مطابقته بشكل منفصل، بين قوسين مربعين. أسهل طريقة للقيام بذلك هي استخدام نطاقات الأحرف لمطابقة أي حرف صغير:
النمط: سلسلة \\[az]
: ` \n `، ` \r `، ` \t `، و ` \f ` هي أحرف مسافة بيضاء، ` \. ` و ` \\ ` و ` \[ ` ليست كذلك .
التطابقات: ^^ ^^ ^^ ^^
(
وهذا يعمل بالفعل ) تعمل نطاقات الأحرف كما قد تتوقع، في المثال أعلاه. ضع قوسين مربعين حول الحرف الأول والأخير الذي تريد مطابقته، مع وضع واصلة بينهما. على سبيل المثال، إذا كنت تريد فقط العثور على "مجموعات" من الشرطة المائلة العكسية
\
وحرف واحد من
a
إلى
m
، فيمكنك القيام بما يلي:
النمط: سلسلة \\[am]
: ` \n `، ` \r `، ` \t `، و ` \f ` هي أحرف مسافة بيضاء، ` \. ` و ` \\ ` و ` \[ ` ليست كذلك .
التطابقات: ^^
(
مثال ) إذا كنت تريد مطابقة نطاقات متعددة، فما عليك سوى وضعها نهاية لنهاية بين قوسين مربعين:
النمط:
سلسلة \\[a-gq-z] : ` \n `، ` \r `، ` \t `، و ` \f ` هي أحرف مسافة بيضاء، ` \. ` و ` \\ ` و ` \[ ` ليست كذلك .
التطابقات: ^^ ^^ ^^
(
مثال ) تشمل نطاقات الأحرف الشائعة الأخرى:
A-Z
و
0-9
دعونا نجربها عمليًا ونحل بعض المشكلات:
يمكن أن تحتوي الأرقام السداسية العشرية على أرقام
0-9
بالإضافة إلى الحروف
A-F
. عند استخدامها لتحديد الألوان، يمكن أن تحتوي الرموز السداسية العشرية على ثلاثة أحرف كحد أقصى. قم بإنشاء تعبير عادي للعثور على رموز سداسية عشرية صالحة في القائمة أدناه:
نمط:
السلسلة: 1H8 4E2 8FF 0P1 T8B 776 42B G12
التطابقات: ^^^ ^^^ ^^^ ^^^
(
الحل ) باستخدام نطاقات الأحرف، أنشئ تعبيرًا عاديًا يحدد فقط الحروف الساكنة الصغيرة (وليس حروف العلة، بما في ذلك
y
) في الجملة أدناه:
نمط:السلسلة
: The w a lls in the mall a r e to t a lly , to o t a lly t a ll . _ _ _ _
المباريات: ^ ^ ^^^ ^ ^^ ^ ^^ ^ ^ ^ ^^^ ^ ^ ^^^ ^ ^^
(
حل )
الخطوة 6: "لا"، علامة الإقحام، علامة الإقحام، علامة الإقحام... الرمز^
في الواقع، هناك أكثر من 9000 اسم لهذا الرمز :) ولكن، للتبسيط، ربما سنركز على "لا". الحل الخاص بي للمشكلة الأخيرة طويل بعض الشيء. استغرق الأمر 17 حرفًا ليقول "احصل على الأبجدية بأكملها باستثناء حروف العلة". بالطبع هناك طريقة أسهل للقيام بذلك. تتيح لنا علامة "لا"
^
تحديد الأحرف ونطاقات الأحرف التي يجب ألا
تتطابق مع تلك المحددة في النمط. الحل الأبسط للمشكلة الأخيرة أعلاه هو العثور على الأحرف التي لا تمثل حروف العلة:
النمط : [ ^ aeiou ] السلسلة
: الجدران الموجودة في المادة كلها موجودة تمامًا ، تمامًا . _ _ _ _ _ _ _ _ _ _ _
المباريات: ^^ ^^ ^^^^ ^^^^ ^^ ^^^ ^ ^ ^ ^^^^^^^ ^ ^^^^^ ^^^
(
مثال ) علامة "ليس"
^
باعتبارها الحرف الموجود في أقصى اليسار داخل الأقواس المربعة
[]
تخبر محرك التعبير العادي بمطابقة حرف واحد (أي) غير موجود بين الأقواس المربعة. هذا يعني أن التعبير العادي أعلاه يطابق أيضًا جميع المسافات والنقاط
.
والفواصل
,
والأحرف الكبيرة
T
في بداية الجملة. ولاستبعادها، يمكننا أيضًا وضعها بين قوسين معقوفين:
النمط : [ ^ aeiou . , T ] السلسلة
: كل شيء موجود تمامًا ، تمامًا . _ _ _ _ _ _ _ _ _ _ _ _ _ _
المباريات: ^ ^ ^^^ ^ ^^ ^ ^^ ^ ^ ^ ^^^ ^ ^ ^^^ ^ ^^
(
مثال )
ملحوظةأنه في هذه الحالة، لا نحتاج إلى الهروب من النقطة بشرطة مائلة عكسية، كما فعلنا من قبل عندما بحثنا عنها دون استخدام الأقواس المربعة. يتم التعامل مع العديد من الأحرف الخاصة الموجودة بين قوسين مربعين حرفيًا، بما في ذلك حرف القوس المفتوح
[
- وليس قوس الإغلاق -
]
(هل يمكنك تخمين السبب؟).
\
لا يتم أيضًا تفسير حرف الخط المائل العكسي حرفيًا. إذا كنت تريد مطابقة شرطة مائلة عكسية حرفية
\
باستخدام الأقواس المربعة، فيجب عليك الهروب منها عن طريق وضع الشرطة المائلة العكسية التالية قبلها
\\
. تم تصميم هذا السلوك بحيث يمكن أيضًا وضع أحرف المسافات البيضاء بين قوسين مربعين للمطابقة:
النمط: [\t]
السلسلة: tttt
المباريات: ^ ^ ^
(
مثال^
) يمكن أيضًا استخدام علامة "ليس" مع النطاقات. إذا أردت التقاط الشخصيات و و و و و فقط
a
،
b
فيمكنني
c
أن أفعل
x
شيئًا مثل هذا:
y
z
النمط: [abcxyz]
السلسلة: abc defghijklmnopqrstuvw xyz
التطابقات: ^^^ ^^^
(
مثال ) ... أو، يمكنني تحديد أنني أريد العثور على أي حرف
ليس بين
d
و
w
:
النمط: [^dw]
السلسلة: abc defghijklmnopqrstuvw xyz
التطابقات: ^^^ ^^^
(
مثال ) ومع ذلك،
احرصمع "لا"
^
. من السهل أن تفكر "حسنًا، لقد حددت
[^ b-f]
، لذا يجب أن أحصل على حرف صغير
a
أو شيء ما بعد
f
. هذا ليس هو الحال. سيطابق هذا التعبير العادي أي حرف لا يقع في هذا النطاق، بما في ذلك الحروف والأرقام وعلامات الترقيم والمسافات.
النمط: [^dw]
السلسلة: abc defg h . i , j - klmnopqrstuvw xyz
المطابقات: ^^^ ^ ^ ^ ^ ^^^
(
مثال )
رفع مستوى المهام:
استخدم علامة "لا"
^
بين قوسين مربعين لمطابقة جميع الكلمات أدناه التي لا تنتهي بـ
y
:
نمط:
السلسلة: Day Dog Hog Hay Bog Bay Ray Rub
المباريات: ^^^ ^^^ ^^^ ^^^
(
الحل ) اكتب تعبيرًا عاديًا باستخدام النطاق وعلامة "ليس"
^
للعثور على جميع السنوات بين عامي 1977 و1982 (شاملة):
نمط:
سلسلة: 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984
التطابقات: ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^
(
الحل ) اكتب تعبيرًا عاديًا للعثور على جميع الأحرف التي ليست علامة "ليس"
^
:
نمط:
السلسلة: abc1 ^ 23*()
التطابقات: ^^^^ ^^^^^
(
حل )
الخطوة 7: فئات الشخصيات
فئات الأحرف أبسط من نطاقات الأحرف. تحتوي محركات التعبير العادي المختلفة على فئات مختلفة متاحة، لذلك سأغطي فقط الفئات الرئيسية هنا. (تحقق من إصدار التعبير العادي الذي تستخدمه، لأنه قد يكون هناك المزيد منها - أو قد تكون مختلفة عن تلك الموضحة هنا.) تعمل فئات الأحرف تقريبًا مثل النطاقات، ولكن لا يمكنك تحديد قيمتي "البداية" و"النهاية":
فصل |
حرف او رمز |
\d |
"أعداد"[0-9] |
\w |
"رموز الكلمات"[A-Za-z0-9_] |
\s |
"المسافات"[ \t\r\n\f] |
تعد فئة الأحرف "الكلمة"
\w
مفيدة بشكل خاص لأن مجموعة الأحرف هذه غالبًا ما تكون مطلوبة للمعرفات الصالحة (أسماء متغيرة، وأسماء الوظائف، وما إلى ذلك) في لغات البرمجة المختلفة. يمكننا استخدامه
\w
لتبسيط التعبير النمطي الذي رأيناه سابقًا:
النمط: سلسلة \\[az]
: ` \n `، ` \r `، ` \t `، و ` \f ` هي أحرف مسافة بيضاء، ` \. ` و ` \\ ` و ` \[ ` ليست كذلك .
التطابقات: ^^ ^^ ^^ ^^
باستخدام
\w
يمكننا أن نكتب مثل هذا:
النمط: سلسلة \\\w
: ` \n `، ` \r `، ` \t `، و ` \f ` هي أحرف مسافة بيضاء، ` \. ` و ` \\ ` و ` \[ ` ليست كذلك .
التطابقات: ^^ ^^ ^^ ^^
(
مثال )
2 مهمات للحظ:
كما نعلم أنت وأنا، في Java، يمكن أن يبدأ المعرف (اسم المتغير، الفئة، الوظيفة، وما إلى ذلك) فقط بالحرف
a
-
zA
- أو
Z
علامة الدولار
$
أو الشرطة السفلية
_
. (
التسطير أسلوب سيء بالطبع، لكن المترجم يتخطى ذلك، ملاحظة المترجم ). يجب أن تكون بقية الأحرف عبارة عن أحرف "كلمة"
\w
. باستخدام فئة أحرف واحدة أو أكثر، قم بإنشاء تعبير عادي للبحث عن معرفات Java الصالحة بين تسلسلات الأحرف الثلاثة التالية:
نمط:
السلسلة: __e $12 .x2 foo Bar 3mm
التطابقات: ^^^ ^^^ ^^^ ^^^
(
الحل ) أرقام الضمان الاجتماعي (SSN) الأمريكية هي أرقام مكونة من 9 أرقام بالتنسيق XXX-XX-XXXX، حيث يمكن أن يتكون كل X من أي رقم
[0-9]
. باستخدام فئة أحرف واحدة أو أكثر، اكتب تعبيرًا عاديًا للعثور على أرقام الضمان الاجتماعي (SSN) المنسقة بشكل صحيح في القائمة أدناه:
نمط:
السلسلة: 113-25=1902 182-82-0192 H23-_3-9982 1I1-O0-E38B
التطابقات: ^^^^^^^^^^^
(
الحل )
RegEx: 20 خطوة قصيرة لإتقان التعبيرات العادية. الجزء 2. 20 خطوة قصيرة لإتقان التعبيرات العادية. الجزء 3. RegEx: 20 خطوة قصيرة لإتقان التعبيرات العادية. الجزء 4.
GO TO FULL VERSION