التعابير النمطية (Regex) للمبتدئين

التعبير النمطي (Regex) نمط مضغوط يصف مجموعة من السلاسل النصية. يستطيع تعبير واحد إيجاد كل عناوين البريد الإلكتروني في سجل، أو التحقق من حقل رقم هاتف، أو استخراج معرّف الطلب من عنوان URL، أو إعادة تسمية ألف ملف دفعة واحدة. وتفهم كل اللغات الرئيسية — JavaScript وPython وJava وGo وC# وPHP — وكل المحررات وأدوات سطر الأوامر الصياغة الأساسية نفسها.

يعلّمك هذا الدليل تلك الأساسيات: الأحرف الحرفية، وفئات الأحرف، والمحددات الكمية، والمراسي، والمجموعات، والأعلام — مع ملخص سريع وأنماط يمكنك نسخها، والأخطاء التي تجعل التعبير يطابق أكثر أو أقل مما ينبغي.

الأحرف الحرفية والأحرف الخاصة

تطابق معظم الأحرف نفسها: النمط cat يطابق «cat» داخل «concatenate». وهناك أربعة عشر حرفاً لها معنى خاص (تسمّيها مواصفة ECMAScript أحرف الصياغة) وتُهرَّب بشرطة مائلة عكسية لمطابقتها حرفياً: . ^ $ * + ? ( ) [ ] { } | والشرطة المائلة العكسية ⁦\⁩ نفسها. أما الشرطة المائلة / فليست منها؛ ولا تحتاج إلى تهريب إلا داخل تعبير JavaScript الحرفي مثل ⁦/a\/b/⁩ لأنها تُنهي النمط هناك. والنقطة هي التي توقع الناس — يطابق a.b الحرف «a» يليه أي حرف ثم «b»، لذا يطابق «a.b» أيضاً «aXb».

في أمثلة الكتلة أدناه: يطابق ⁦colou?r⁩ الكلمتين «color» و«colour» لأن ? تجعل الحرف u اختيارياً؛ ويطابق ⁦\d{3}-\d{4}⁩ رقماً مثل ⁦555-1234⁩؛ ويطابق ⁦\.⁩ نقطة حرفية؛ ويطابق ⁦https?://⁩ كلاً من ⁦http://⁩ و⁦https://⁩.

colou?r       matches "color" and "colour"
\d{3}-\d{4}   matches 555-1234
\.            matches a literal dot
https?://     matches http:// and https://

جرّبها: أداة اختبار Regex

فئات الأحرف

  • [abc] — واحد من a أو b أو c. [a-z] — أي حرف لاتيني صغير. [^0-9] — أي شيء عدا الأرقام.
  • \d — رقم [0-9]. \w — حرف كلمة [A-Za-z0-9_]. \s — مسافة بيضاء (مسافة، جدولة، سطر جديد). الأحرف الكبيرة تعكس المعنى: \D و\W و\S.
  • . — أي حرف عدا السطر الجديد (ما لم يُضبط العلم s).
  • Unicode — في JavaScript يبقى ⁦\w⁩ و⁦\d⁩ مقصورين على ASCII حتى مع العلم u أو v. استخدم بدلاً منهما العلم u مع خصائص Unicode: ⁦\p{L}⁩ لأي حرف، و⁦\p{Script=Arabic}⁩ للحروف العربية، و⁦\p{Script=Devanagari}⁩ للهندية. والحركات العربية وعلامات الحروف الصوتية في الهندية علامات مركّبة (⁦\p{M}⁩) لا حروف، لذا طابق الكلمة كاملة بـ ⁦[\p{L}\p{M}]+⁩ لا بـ ⁦\p{L}+⁩ وحدها.

المحددات الكمية: كم مرة

  • * — صفر أو أكثر. + — واحد أو أكثر. ? — صفر أو واحد.
  • {3} — ثلاث مرات بالضبط. {2,5} — من مرتين إلى خمس. {2,} — مرتان أو أكثر.
  • المحددات الكمية جشعة: يأخذ .* أكبر قدر ممكن. أضف ? لجعلها كسولة: يتوقف .*? عند أول فرصة. يطابق <.+> على «<a><b>» السلسلة كلها؛ ويطابق <.+?> «<a>» فقط.
يمتد النمط الجشع <.+> إلى آخر > يستطيع بلوغه؛ وإضافة ? تجعله كسولاً فيتوقف عند أول >.

<.+>جشع

يأخذ أكبر قدر ممكن: السلسلة كلها

[تطابق: <a><b> — نهاية التطابق]

<.+?>كسول

يتوقف عند أول فرصة: <a> فقط

[تطابق: <a> — نهاية التطابق]<b>

المظلَّل: الجزء الذي يطابقه النمط من كل مدخل، كما تجده JavaScript.

جرّبها: شارح Regex

المراسي والمجموعات والتناوب

  • ^ — بداية السلسلة (أو السطر مع العلم m). $ — النهاية. \b — حد كلمة، فيطابق \bcat\b «cat» ولا يطابق «concatenate».
  • ( ) — مجموعة التقاط: يلتقط (\d{4})-(\d{2}) السنة والشهر منفصلين. (?: ) تجمّع دون التقاط. (?<year>\d{4}) تسمّي المجموعة.
  • | — التناوب: يطابق jpg|png|gif أياً من الثلاثة. ضعه في مجموعة لتحديد نطاقه: \.(jpg|png|gif)$.
  • (?=…) و(?!…) — النظر للأمام: طابق فقط إذا كان ما يليه يطابق (أو لا يطابق) دون استهلاكه. يُستخدم لقواعد كلمات المرور: ^(?=.*\d)(?=.*[A-Z]).{12,}$.

الأعلام

  • i — غير حساس لحالة الأحرف. g — شامل (إيجاد كل التطابقات لا الأول فقط). m — متعدد الأسطر: يطابق ^ و$ عند حدود الأسطر.
  • s — النقطة تطابق الكل: تطابق . أسطراً جديدة أيضاً. u — وضع Unicode. x (في بعض المحركات) — تجاهل المسافات والسماح بالتعليقات في النمط.

أنماط يمكنك نسخها

الأنماط في الكتلة أدناه بالترتيب: بريد إلكتروني (نمط عملي لا يغطي كل حالات المواصفة)، ورقم جوال سعودي، ورقم جوال هندي، وتاريخ ISO بصيغة ⁦YYYY-MM-DD⁩، وUUID، وعنوان URL (فحص متساهل)، ولون Hex، وكلمة مرور قوية (12 حرفاً على الأقل فيها حرف صغير وحرف كبير ورقم ورمز)، وحذف المسافات في بداية النص ونهايته، واستخراج رقم الطلب من مسار ⁦/orders/⁩.

Email (practical):    ^[^\s@]+@[^\s@]+\.[^\s@]{2,}$
Saudi mobile:         ^(?:\+966|0)5\d{8}$
Indian mobile:        ^(?:\+91|0)?[6-9]\d{9}$
ISO date:             ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
UUID:                 ^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
URL (loose):          ^https?://[^\s/$.?#].[^\s]*$
Hex color:            ^#(?:[0-9a-fA-F]{3}){1,2}$
Strong password:      ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\w\s]).{12,}$
Trim whitespace:      ^\s+|\s+$
Extract order id:     /orders/(\d+)

جرّبها: أداة اختبار Regex جرّبها: مولّد Regex

أخطاء تجعل التطابق أكثر أو أقل مما ينبغي

  • نسيان المراسي: «يتحقق» \d{4} من 12345 لأنه يجد 1234 داخله. استخدم ^\d{4}$.
  • نقاط غير مهرّبة: يطابق example.com «exampleXcom». اكتب example\.com.
  • محددات جشعة عبر السطر كله: يلتقط "(.*)" في سطر فيه نصان مقتبسان كليهما معاً.
  • التراجع الكارثي: المحددات المتداخلة مثل (a+)+ على مدخل غير مطابق قد تستغرق ثوانيَ أو تتجمد. أبقِ المحددات بسيطة واختبر بمدخلات طويلة.
  • التحقق من البريد الإلكتروني بنمط عملاق: النمط العملي أعلاه مع بريد تأكيد أفضل من تعبير من 400 حرف ما زال يرفض عناوين صالحة.
  • افتراضات اللغة: في JavaScript لا يطابق ⁦\w⁩ الحروف العربية أو الديفاناغارية أبداً، حتى في وضع Unicode. استخدم ⁦[\p{L}\p{M}]⁩ مع العلم u.
من دون مراسٍ قد يطابق النمط جزءاً من المدخل، والنقطة غير المهرّبة تطابق أي حرف؛ والتصحيحان يرفضان هذين المدخلين.

\d{4}نسيان المراسي

يجد 1234 داخل 12345، فـ«يتحقق» من 12345

[تطابق: 1234 — نهاية التطابق]5

^\d{4}$التصحيح

يربط ^ و$ النمط بالمدخل كله: لا تطابق

12345

example.comنقطة غير مهرّبة

تطابق النقطة أي حرف، وهنا الحرف X

[تطابق: exampleXcom — نهاية التطابق]

example\.comالتصحيح

لا يطابق \. إلا نقطة حرفية: لا تطابق

exampleXcom

المظلَّل: الجزء الذي يطابقه النمط من كل مدخل، كما تجده JavaScript.

جرّبها: أداة اختبار Regex جرّبها: شارح Regex

الأسئلة الشائعة

فيم تُستخدم التعابير النمطية؟

في إيجاد النصوص التي تتبع نمطاً والتحقق منها واستخراجها واستبدالها: التحقق من النماذج، والبحث في السجلات، واستخراج المعرّفات من السلاسل، وإعادة التسمية بالجملة، والبحث والاستبدال في المحررات.

ماذا يعني \d في Regex؟

أي رقم واحد من 0 إلى 9. يعني \d{3} ثلاثة أرقام بالضبط؛ ويعني \d+ رقماً واحداً أو أكثر.

ما الفرق بين * و+ في Regex؟

يطابق * صفر تكرار أو أكثر (فقد يغيب العنصر)؛ بينما يشترط + تكراراً واحداً على الأقل.

هل Regex واحد في كل اللغات؟

الصياغة الأساسية مشتركة، لكن التفاصيل تختلف: دعم النظر للخلف، والمجموعات المسمّاة، وفئات Unicode، والأعلام تتباين بين JavaScript وPython (re) وJava وPCRE (PHP) وGo (RE2 الذي لا يتراجع).

كيف أختبر تعبيراً نمطياً؟

الصق النمط ونصاً تجريبياً في أداة اختبار تبرز التطابقات والمجموعات، ثم جرّب مدخلات لا ينبغي أن تتطابق. ضمّن مدخلات طويلة وغير معتادة لاكتشاف مشكلات الأداء.

هل يمكنني استخدام Regex لتحليل HTML أو JSON؟

لاستخراج سريع لمرة واحدة، نعم. أما لأي شيء موثوق فلا — البنى المتداخلة تحتاج إلى محلّل حقيقي. استخدم عارض شجرة JSON أو JSONPath مع JSON.

المراجع

تمرين عملي

اكتب وراجع ثلاثة تعابير نمطية لصفحة تتبع الطرود

المطلوب

أنت تختبر ميزة «تتبع طرد» في تطبيق شركة شحن (مثال خيالي): نموذج ويب يستقبل رقم التتبع، وصفحة حالة، وواجهة API خلفهما. تعرض المادة أدناه المتطلبين، ونمط التحقق الذي كتبه المطوّر للنموذج، وثلاثة أسطر حالة شوهدت في بيئة الاختبار، ومقتطفاً قصيراً من سجل الخادم. تحتاج إلى تعابير نمطية (Regex) في ثلاثة مواضع: لمراجعة التحقق في النموذج، ولاستخراج القيم من سطر الحالة داخل فحص آلي، وللبحث في السجل.

اعمل على الورق أولاً، ثم افحص كل نمط في «أداة اختبار Regex»: نمط النموذج مقابل كل مدخل من مدخلاتك في الخطوة 2، ونمطَي سطر الحالة والسجل مقابل المادة بعد لصقها نصاً تجريبياً. وجرّب لكل نمط مدخلاً واحداً على الأقل يجب ألا يطابق. استخدم صياغة JavaScript كما في الدليل. وفي الخطوة 2 يستطيع «مولّد اختبارات التحقق» (Validation Test Generator) أن يحوّل سطر تعريف الحقل trackingNumber: string, required, length=13, pattern= متبوعاً بنمطك المصحح إلى قائمة مراجعة (Checklist) بحالات اختبار التحقق (مدخل فارغ، و12 و14 حرفاً، وقيمة تخالف النمط). أبقِ النوع string: فمن دونه يُقرأ اسم الحقل المنتهي بـ «Number» على أنه عدد صحيح. وتعرض القائمة قيماً نائبة (Placeholders)، فتبقى أنت من يختار المدخلات الفعلية. خصّص لذلك ⁦20–30⁩ دقيقة.

المادة
تطبيق شركة شحن (مثال خيالي) - يضيف الإصدار 3.2 ميزة «تتبع طرد»: نموذج وصفحة حالة وAPI

المتطلبات
  FR-21  رقم التتبع 13 حرفاً: حرفان ثم 9 أرقام ثم حرفان، مثل RB123456789SA.
         يجوز كتابة الحروف صغيرة؛ ويحوّلها النموذج إلى حروف كبيرة قبل البحث.
  FR-22  تعرض صفحة الحالة سطر حالة واحداً بهذه الصيغة:
         Parcel <tracking number>: <status> <YYYY-MM-DD> <HH:MM> (<city>)
         حيث <status> واحدة من: accepted, in transit, out for delivery, delivered.

التحقق الحالي في النموذج (JavaScript، بلا أعلام)
  [A-Z]{2}\d{9}[A-Z]{2}

أسطر الحالة المشاهَدة في بيئة الاختبار
Parcel RB123456789SA: delivered 2026-10-02 14:05 (Riyadh)
Parcel CP987654321IN: out for delivery 2026-10-02 07:45 (New Delhi)
Parcel LX456789123SA: in transit 2026-10-01 09:30 (Jeddah)

مقتطف من سجل الخادم (طلب واحد في كل سطر: الوقت، الطريقة، المسار، الحالة، المدة)
2026-10-02T14:05:12Z GET /api/v2/parcels/RB123456789SA/events 200 83ms
2026-10-02T14:05:13Z GET /api/v2/parcels/RB123456789SA 503 1204ms
2026-10-02T14:05:14Z POST /api/v2/parcels 201 44ms
2026-10-02T14:05:15Z GET /api/v2/parcels/CP512345678IN 200 512ms
2026-10-02T14:05:16Z GET /api/v2/rates?from=RUH&to=DEL 500 31ms
2026-10-02T14:05:17Z GET /api/v2/parcels/EE500000000SA 404 12ms
2026-10-02T14:05:18Z POST /api/v2/parcels 502 2003ms
الخطوات
  1. قارن نمط المطوّر بالمتطلب FR-21 مستعيناً بقائمة الأخطاء في الدليل: ما المدخلات التي يقبلها وكان يجب أن يرفضها، وما المدخلات التي يرفضها وكان يجب أن يقبلها؟ اكتب النمط المصحح مع أعلامه.
  2. اكتب مدخلات الاختبار للنمط المصحح: ثلاثة على الأقل يجب أن تطابق، وستة يجب ألا تطابق، كل منها مختار ليكسر جزءاً واحداً من القاعدة (الطول، والحروف، والأرقام، والأحرف الزائدة).
  3. للفحص الآلي لصفحة الحالة، اكتب نمطاً واحداً بمجموعات مسمّاة يستخرج رقم التتبع والحالة والتاريخ والوقت والمدينة من سطر الحالة (FR-22). يجب أن يطابق الأسطر الثلاثة في المثال، وألا يطابق سطراً كُتبت حالته بخطأ إملائي مثل «delivred».
  4. اكتب نمطاً يجد في مقتطف السجل الأسطر التي حصل فيها طلب إلى مسار /api/v2/parcels على حالة 5xx فقط. اذكر الأعلام التي يحتاجها، والأسطر التي يطابقها، ولماذا لا يكفي 5\d\d وحده.
  5. دوّن أي سؤال يتركه المتطلبان مفتوحاً، ومن تسأله.
إظهار الإجابة النموذجية
الإجابة النموذجية

الخطوة 1. في نمط المطوّر [A-Z]{2}\d{9}[A-Z]{2} عيبان، واحد في كل اتجاه من قائمة أخطاء الدليل. فهو يطابق أكثر مما ينبغي لأنه بلا مراسٍ (Anchors): يقبل أي مدخل يحوي رقماً صالحاً في أي موضع منه، فتمر XRB123456789SAX وRB123456789SA123 وRB123456789SA متبوعة بمسافة. ويطابق أقل مما ينبغي لأن [A-Z] دون العلم i يرفض rb123456789sa، والمتطلب FR-21 يقول إن النموذج يجب أن يقبله. النمط المصحح: ^[A-Z]{2}\d{9}[A-Z]{2}$ مع العلم i، ويُكتب في JavaScript /^[A-Z]{2}\d{9}[A-Z]{2}$/i؛ ويكافئه ^[A-Za-z]{2}\d{9}[A-Za-z]{2}$ بلا أعلام. وتنبيه قبل الإبلاغ عن العيب الثاني: إن كان النموذج يحوّل المدخل إلى حروف كبيرة قبل تشغيل هذا الفحص فالحروف الصغيرة تمر أصلاً. هذا سؤال للمطوّر، والمدخل الاختباري rb123456789sa يحسمه في الحالتين.

الخطوة 2. يجب أن تطابق: RB123456789SA، وrb123456789sa (حالة الأحرف)، وCP987654321IN (بادئة ورمز دولة مختلفان). يجب ألا تطابق: RB12345678SA (8 أرقام) وRB1234567890SA (10 أرقام)، وهما طولا الحدّين؛ وRB123456789S (حرف واحد في النهاية)؛ وR1123456789SA (رقم في موضع حرف)؛ وXRB123456789SAX وRB123456789SA123 (أحرف زائدة لا يرفضها إلا المرساتان)؛ وRB123456789SA متبوعة بمسافة (شائعة بعد النسخ واللصق)؛ وRB-123456789-SA (فواصل)؛ ومدخل فارغ. يكسر كل مدخل غير صالح جزءاً واحداً بالضبط من القاعدة، فإذا قُبل أحدها عرفت أي جزء من النمط خاطئ. والنتيجة المتوقعة لكل مدخل «مقبول» أو «مرفوض»، كما في أي حالة اختبار للتحقق.

الخطوة 3. نمط واحد يحقق FR-22: ^Parcel (?<id>[A-Z]{2}\d{9}[A-Z]{2}): (?<status>accepted|in transit|out for delivery|delivered) (?<date>\d{4}-\d{2}-\d{2}) (?<time>\d{2}:\d{2}) \((?<city>[^()]+)\)$. النقاط المهمة: التناوب (Alternation) الخاص بالحالة موضوع داخل مجموعة خاصة به، فنطاقه الحالة وحدها؛ ولو كُتب دون مجموعة لقسّم accepted|in transit|… النمط كله إلى أربعة بدائل وطابق تقريباً أي نص يحوي «in transit». والقوسان حول المدينة حرفان خاصان، فيُهرَّب القوسان الحرفيان بـ \( و\). والمدينة [^()]+ لا \w+: فـ \w+ يطابق «Riyadh» ولا يطابق «New Delhi» بسبب المسافة، ولا يطابق أبداً، كما يحذّر الدليل، اسم مدينة بالحروف العربية أو الديفاناغارية إذا كانت الصفحة موطَّنة؛ أما الفئة المنفية، أو [\p{L}\p{M} ]+ مع العلم u، فتعالج الحالتين. والمرساتان ^ و$ تجعلان الفحص يرفض سطراً نقص منه شيء أو زاد عليه. وعلى السطر الأول في المثال تكون المجموعات: id = RB123456789SA، وstatus = delivered، وdate = 2026-10-02، وtime = 14:05، وcity = Riyadh؛ وعلى السطر الثاني status = out for delivery وcity = New Delhi. والسطر الذي فيه «delivred» لا يطابق أصلاً، فيفشل الفحص بدلاً من أن يبلّغ عن نجاح، وهذا بالضبط ما يحتاجه الاختبار: فالنمط المتساهل الذي يقبل قيمة خاطئة يجعل الاختبار ينجح حين يجب أن يفشل (نتيجة سلبية كاذبة، False-negative result). وفي الاختبار قارن كل مجموعة بالقيمة المتوقعة، مثل m.groups.status === "delivered". وتكفي مجموعة التاريخ \d{4}-\d{2}-\d{2} هنا لأن الاختبار يقارن القيمة نفسها؛ ولا تستخدم نمط تاريخ ISO الأدق من الدليل إلا حين يكون غرض الاختبار الصيغة نفسها. وفي الفحص الآلي يعمل النمط على سطر حالة واحد فلا يحتاج إلى أي علم؛ ولتجربته في «أداة اختبار Regex» على المادة كلها فعّل العلم m، للسبب المشروح في الخطوة 4.

الخطوة 4. نمط يجد استجابتي 5xx على مسارات الطرود فقط: ^\S+ \S+ /api/v2/parcels(?:/\S*)? 5\d\d \d+ms$ مع العلم m حتى يطابق ^ و$ عند حدود الأسطر، ومع العلم g في أداة الاختبار لرؤية كل التطابقات؛ وفي تعبير JavaScript الحرفي تُكتب الشرطات المائلة \/. قراءته من اليسار إلى اليمين: الطابع الزمني، ثم الطريقة، ثم المسار /api/v2/parcels متبوعاً اختيارياً بـ / ومزيد من الأحرف غير المسافات (/RB123456789SA أو /RB123456789SA/events)، ثم حالة تبدأ بـ 5، ثم المدة. يطابق سطرين بالضبط: طلب GET بالحالة 503 وطلب POST بالحالة 502. أما 5\d\d وحده فيجد تسعة تطابقات في ستة من الأسطر السبعة لأنه يجد الأرقام في أي موضع: 567 داخل RB123456789SA في سطرين، و512 ثم 567 داخل CP512345678IN، و512 مرة أخرى في المدة 512ms، و500 داخل EE500000000SA، والحالة 500 على /api/v2/rates وهو ليس مسار طرود؛ ولا تريد من التسعة إلا 503 و502. ووضع مسافة على جانبي الحالة، \s5\d\d\s، يزيل التطابقات الكاذبة في أرقام التتبع والمدد لكنه يبقي سطر الأسعار؛ وشرط المسار يزيله أيضاً. ومن دون العلم m لا يطابق النمط شيئاً، لأن ^ و$ يعنيان عندئذٍ بداية النص كله ونهايته. وهذه القاعدة نفسها التي في النموذج: من دون سياق ومراسٍ يطابق التعبير أكثر مما ينبغي.

الخطوة 5. أسئلة مفتوحة لمالك المنتج أو المطوّر: هل يتحقق النموذج قبل التحويل إلى الحروف الكبيرة أم بعده، وهل يُحذف الفراغ الطرفي من المدخل (المسافة الزائدة من النسخ واللصق شائعة)؟ هل تُقبل الأرقام العربية المشرقية المكتوبة على لوحة مفاتيح عربية أم تُحوَّل؟ فـ \d في JavaScript لا يطابق إلا 0–9، لذا يُرفض RB١٢٣٤٥٦٧٨٩SA. هل قائمة الحالات في FR-22 كاملة، وكيف يبدو السطر حين لا تكون للطرد مدينة بعد؟ وما رسالة الخطأ التي يعرضها النموذج لكل مدخل مرفوض حتى يؤكدها الاختبار؟

إن اختلفت أنماطك فافحصها في «أداة اختبار Regex». يجب أن يقبل نمط النموذج، حين تجرّبه على كل مدخل من مدخلات الخطوة 2 (أو عليها كلها، مدخلاً في كل سطر، مع العلم m)، المدخلات الصالحة الثلاثة ويرفض كل المدخلات الأخرى. ومقابل المادة مع العلم m يجب أن يطابق نمط سطر الحالة أسطر الحالة الثلاثة بقيم المجموعات الصحيحة ويرفض السطر ذا الخطأ الإملائي حين تضيفه، وأن يبرز نمط السجل سطرين من السجل بالضبط. والنمط المختلف المكافئ مقبول — فـ \d{2} و[0-9]{2} شيء واحد — ما دام مثبتاً بالمراسي حيث يتحقق، ويهرّب كل حرف خاص حرفي، ويبقي التناوب داخل مجموعة. ولا يضع أي من هذه الأنماط محدداً كمياً متكرراً على مجموعة تحوي محدداً آخر، مثل (a+)+ في الدليل: فالمجموعة الوحيدة التي عليها محدد كمي، (?:/\S*)?، اختيارية ولا تُطابَق أكثر من مرة، لذا فخطر التراجع الكارثي (Catastrophic backtracking) منخفض؛ والصق مدخلاً طويلاً لتتأكد. ثم ضع نمط سطر الحالة في «شارح Regex» واقرأه رمزاً رمزاً: فهي طريقة سريعة لإيجاد خطأ لا تراه.

تقدّمك في هذا الموضوع

جزء من مسار تعلم ضمان الجودة

الأدوات المذكورة في هذا الدليل

اختبر التعابير النمطية مباشرةً مع إبراز التطابقات ومجموعات الالتقاط ومعاينة الاستبدال.

أدوات مساعدة

احصل على شرح بالإنجليزية المبسّطة لأي تعبير نمطي، رمزاً رمزاً.

أدوات مساعدة

أنشئ تعابير نمطية من مكتبة أنماط مختبَرة (البريد الإلكتروني، URL، IP، التواريخ، IBAN، أرقام الهواتف السعودية والأردنية…) ومن قواعد مخصصة.

أدوات مساعدة

تقييم تعبيرات JSONPath ($.store.book[*].author) على JSON وعرض النتائج المطابقة فوراً.

JSON والبيانات

أدلة أخرى

أدلة أخرى
JSON والبيانات

ما هو JSON؟

شرح JSON بلغة مبسّطة: ما هو، وأنواع القيم الست، وقواعد الصياغة التي يخطئ فيها الكثيرون، وكيفية تنسيقه والتحقق منه، ومقارنته بـ XML وYAML.

وقت القراءة 4 دقائق
الأمان

ما هو JWT؟ شرح رموز JSON Web Token

شرح مبسّط لـ JWT: الأجزاء الثلاثة للرمز، والمطالبات مثل exp وsub، وكيفية فك ترميزه والتحقق منه، ولماذا فك الترميز ليس تحققاً، وقواعد الأمان.

وقت القراءة 4 دقائق
الترميز

ما هو Base64؟ شرح الترميز

شرح Base64: ما هو وما ليس هو، وكيف يعمل الترميز، ولماذا يكبر الناتج بالثلث، والفرق بين Base64 وBase64URL، وحشو =، وكيفية الترميز وفك الترميز.

وقت القراءة 4 دقائق
أدوات مساعدة

ما هو UUID؟ الفرق بين v4 وv7 وبين UUID وGUID وULID

شرح UUID: صيغة الـ 128 بت، والفرق بين v4 وv7، ولماذا v7 أفضل لمفاتيح قواعد البيانات، ومقارنة UUID بـ GUID وULID، واحتمال التصادم، والتوليد والتحقق.

وقت القراءة 4 دقائق
الويب

شرح رموز حالة HTTP

شرح كل فئة من رموز حالة HTTP مع الرموز التي تقابلها فعلاً — 200 و301 و400 و401 و403 و404 و422 و429 و500 و502 و503 و504 — وسبب كل منها وأيها تعيده.

وقت القراءة 5 دقائق
أدوات مساعدة

شرح تعابير cron

شرح تعابير cron حقلاً حقلاً: الدقيقة والساعة واليوم والشهر ويوم الأسبوع، والمعاملات * و/ و- و,، والجدولات الشائعة، والمناطق الزمنية، والأخطاء الشائعة.

وقت القراءة 5 دقائق