انتقل إلى محتوى الدرس
الدرس 28
دورة MySQL

مطابقة الأنماط النصية عبر LIKE والتعابير النمطية REGEXPMySQL Pattern Matching with LIKE Wildcards and REGEXP

تعلّم مطابقة الأنماط النصية عبر LIKE والتعابير النمطية REGEXP بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
8
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع
طابق صفراً أو أكثر من الأحرف في الأعمدة النصية باستخدام رمز النسبة المئوية % مع LIKE و NOT LIKE.

يُنفّذ المعامل LIKE مطابقة الأنماط النصية باستخدام رمزي بحث قياسيين. يطابق رمز النسبة المئوية % أي سلسلة مكونة من صفر أو أكثر من الأحرف.

  • مطابقة البادئة 'MySQL%': تطابق النصوص التي تبدأ بكلمة MySQL، ويستطيع محرك InnoDB هنا استخدام فهرس B-Tree بكفاءة لأن بداية النص معروفة.
  • مطابقة النهاية أو الوسط '%SQL%': وضع الرمز % في بداية النمط يمنع استخدام الفهرس العادي ويجبر المحرك على فحص الصفوف واحداً تلو الآخر.

انتبه إلى أن الرمز % لا يطابق القيمة الفارغة NULL أبداً؛ فالتعبير NULL LIKE '%' يُعيد NULL.

البحث بالرموز البديلة في LIKE والتعابير النمطية REGEXP

يستفيد النمط البادئ بحروف ثابتة 'abc%' من الفهرس، بينما يتطلب البدء بـ '%' أو REGEXP فحص الصفوف
مخطط توضيحي لدرس مطابقة الأنماط النصية عبر LIKE والتعابير النمطية REGEXP
مخطط توضيحي لدرس مطابقة الأنماط النصية عبر LIKE والتعابير النمطية REGEXP
SQL
-- Prefix search (index-friendly) vs substring search
SELECT user_id, username, email
FROM users
WHERE username LIKE 'dev%';

SELECT user_id, email
FROM users
WHERE email NOT LIKE '%@example.org';
اضبط عدد الأحرف ومواقعها بدقة داخل النمط النصي باستخدام رمز الشرطة السفلية (_).

يطابق رمز الشرطة السفلية _ داخل جملة LIKE حرفاً واحداً بالضبط أياً كانت قيمته.

  • فحص الرموز ذات الطول الثابت: النمط 'INV-2026-___' يطابق فقط أرقام الفواتير التي تنتهي بثلاثة خانات بالضبط بعد الشرطة.
  • الدمج بين _ و %: كتابة النمط '_a%' تطابق أي نص يكون حرفه الثاني هو الحرف a متبوعاً بأي عدد من الأحرف.

في الأعمدة المرمّزة بـ utf8mb4، تطابق الشرطة السفلية الواحدة حرفاً كاملاً متعدد البايتات وليس بايتاً واحداً فقط.

SQL
-- Match 5-character warehouse codes starting with WH-
SELECT item_id, warehouse_code, bin_code
FROM stock_items
WHERE warehouse_code LIKE 'WH-__'
  AND bin_code LIKE 'A_0%';
ابحث عن رمزي % و _ كحروف نصية عادية باستخدام الشرطة المائلة أو جملة ESCAPE الصريحة.

تحتوي كثير من البيانات الفعلية على علامة النسبة المئوية مثل '20% Off' أو الشرطة السفلية مثل 'role_admin'. بدون تحييد هذه الرموز سيعاملها MySQL كرموز بحث عشوائية.

  • التحييد الافتراضي بالشرطة العكسية: كتابة \% أو \_ تطابق الرمز الحرفي نفسه بدلاً من اعتباره رمزاً بديلاً.
  • تحديد حرف هروب مخصص عبر ESCAPE: كتابة LIKE '%20!%%' ESCAPE '!' تتيح لك اختيار رمز واضح مثل ! لتحييد الرمز الذي يليه مباشرة دون تعقيد الشرطات العكسية المزدوجة.

يضمن استخدام ESCAPE الصريحة وضوح النمط وتوافقه القياسي عبر مختلف محركات قواعد البيانات.

SQL
-- Match literal '25%' discount text and literal '_' in codes
SELECT promo_id, promo_code, banner_text
FROM promotions
WHERE banner_text LIKE '%25!%%' ESCAPE '!'
  AND promo_code LIKE 'VIP!_%' ESCAPE '!';
افحص الأنماط النصية المعقدة باستخدام محرك التعابير النمطية ICU في MySQL 8 عبر REGEXP و RLIKE.

عندما لا تكفي رموز LIKE البسيطة لوصف نمط النص المطلوب، يوفر MySQL 8 محرك التعابير النمطية المتقدم ICU الداعم لترميز Unicode الكامل عبر المعامل REGEXP أو مرادفه RLIKE.

  • مطابقة جزئية افتراضياً: خلافاً للمعامل LIKE الذي يشترط مطابقة كامل النص، ينجح المعامل REGEXP بمجرد العثور على النمط في أي موضع داخل السلسلة النصية.
  • التخيير والتكرار الكمي: يمكنك استخدام رمز البدائل | مثل '(error|timeout)' ومحددات التكرار مثل {3,5} و + و ?.

كما يوفر MySQL 8 الدالة REGEXP_LIKE(expr, pat, mode) التي تقبل المعامل 'c' لحساسية الأحرف أو 'i' لتجاهل حالة الأحرف.

SQL
-- Match logs containing error or fatal, and filter with NOT REGEXP
SELECT log_id, service_name, message
FROM system_logs
WHERE message REGEXP 'error|timeout|fatal'
  AND service_name NOT REGEXP 'test|staging';
قيّد المطابقة من بداية النص (^) إلى نهايته ($) وحدّد فئات الأحرف والأرقام المسموحة عبر الأقواس المربعة.

للتحقق من صحة النصوص المهيكلة مثل الأرقام التسلسلية أو الرموز البريدية أو المعرفات النصية عبر REGEXP، نجمع بين محددات الأطراف وفئات الأحرف.

  • محددا البداية ^ والنهاية $: يربط الرمز ^ النمط ببداية السلسلة النصية، ويربطه الرمز $ بنهايتها؛ ووجودهما معاً ^...$ يفرض مطابقة النص بالكامل من أول حرف لآخره.
  • فئات الأحرف [...] والنفي [^...]: تطابق الفئة [0-9] أي رقم، وتطابق [A-Z] الأحرف الإنجليزية، بينما تطابق [^0-9] أي حرف غير رقمي.

تُطبَّق محددات الكمية مثل + (واحد فأكثر) و {4} (أربعة بالضبط) على الفئة أو القوس الذي يسبقها مباشرة.

SQL
-- Validate strict SKU format: 2 letters, hyphen, 4 digits
SELECT product_id, sku_code, slug
FROM products
WHERE sku_code REGEXP '^[A-Z]{2}-[0-9]{4}$'
  AND slug REGEXP '^[a-z0-9-]+$';
مقارنة شاملة بين LIKE و REGEXP من حيث الصياغة ونطاق المطابقة واستخدام فهارس B-Tree والأداء.

يقارن الجدول التالي بين المعاملين LIKE و REGEXP في MySQL 8 من حيث نطاق المطابقة والرموز المدعومة واستخدام الفهارس:

وجه المقارنةالمعامل LIKEالمعامل REGEXP / RLIKE
نطاق المطابقة الافتراضيكامل النص (إلا عند إضافة %)جزئي في أي موضع (إلا عند وضع ^...$)
الرموز المدعومة% (صفر فأكثر)، _ (حرف واحد). و * و + و ? و {n,m} و [...] و | و ^ و $
استخدام فهرس B-Treeيستخدم الفهرس مع البادئة الثابتة 'abc%'لا يستخدم فهرس النطاق العادي B-Tree
تحييد الرموز الخاصةعبر \% أو جملة ESCAPE '!'عبر الشرطة العكسية القياسية في التعابير النمطية
أفضل حالة استخدامالبحث بالبادئة أو الاحتواء النصي البسيطالتحقق من الصيغ المهيكلة والأنماط المركّبة

ملخص الدرس: تعلّمت في هذا الدرس مطابقة الأنماط النصية عبر LIKE برمزي % و _، وتحييد الرموز الحرفية بجملة ESCAPE، واستخدام التعابير النمطية المتقدمة REGEXP وفئات الأحرف ومحددات الأطراف.
الخطوة التالية والدرس القادم: نختتم هذه الوحدة في الدرس القادم بتعلّم فحص القيم الفارغة عبر IS NULL وترتيب النتائج بجملة ORDER BY وتقسيم الصفحات عبر LIMIT و OFFSET.

SQL
-- Combine indexed prefix LIKE with strict REGEXP validation
SELECT user_id, username, phone_ext
FROM users
WHERE username LIKE 'eng%'
  AND phone_ext REGEXP '^[0-9]{4}$';
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنّا في هذا الدرس مطابقة الأنماط النصية عبر LIKE والتعابير النمطية REGEXP في MySQL 8 مع أمثلة عملية.

الخطوة التالية والدرس القادم

أكمل التدريبات والاختبار التفاعلي أدناه قبل الانتقال إلى الدرس التالي في مسار MySQL.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 LIKE Operator معامل المطابقة النصية LIKE
معامل في SQL لمطابقة السلاسل النصية باستخدام الرمز % لأي عدد من الأحرف والرمز _ لحرف واحد.
للمراجعة
02 ESCAPE Clause جملة الهروب ESCAPE
جملة اختيارية مع LIKE تحدد حرفاً خاصاً لتحييد رمزي % و _ والبحث عنهما كحروف عادية.
للمراجعة
03 REGEXP / RLIKE معامل التعابير النمطية REGEXP
معامل التعابير النمطية في MySQL 8 المبني على مكتبة ICU لدعم المطابقة النصية المتقدمة.
للمراجعة
04 Boundary Anchors (^ and $) محددا البداية والنهاية (^ و $)
رمزان في التعابير النمطية يربطان المطابقة ببداية النص (^) ونهايته ($).
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 REGEXP REGEXP
Regular Expression
تعبير نمطي يصف قاعدة بحث أو تحقق نصي متقدم
للمراجعة
02 ICU ICU
International Components for Unicode
مكتبة Unicode القياسية المعتمدة لمحرك التعابير النمطية في MySQL 8
للمراجعة
03 SKU SKU
Stock Keeping Unit
رمز تعريف المنتج القياسي في المخزون الذي يُفحص غالباً بـ LIKE أو REGEXP
للمراجعة
04 UTF8MB4 UTF8MB4
4-Byte UTF-8 Unicode Encoding
ترميز الأحرف العالمي رباعي البايتات في MySQL 8
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اكتب استعلام SELECT على جدول users يعرض user_id و email للمستخدمين الذين يبدأ بريدهم الإلكتروني بكلمة 'support'.

  2. اكتب استعلام SELECT على جدول branches يعرض branch_id و postal_code للفروع التي يتكون رمزها البريدي من 4 أرقام بالضبط ('^[0-9]{4}$').

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 1أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الفرق بين الرمز % والرمز _ داخل نمط البحث LIKE في MySQL؟

في جملة LIKE يطابق الرمز % أي سلسلة من صفر أو أكثر من الأحرف، بينما يطابق _ حرفاً واحداً فقط.

02

أي نمط من أنماط LIKE التالية يتيح لمحرك InnoDB الاستفادة من فهرس B-Tree العادي على العمود؟

البادئة الثابتة 'mysql%' تمكّن محرك InnoDB من تحديد نقطة البداية في شجرة B-Tree وتنفيذ مسح نطاقي سريع.

03

كيف تبحث عن النصوص التي تحتوي على العبارة الحرفية '50%' باستخدام جملة ESCAPE '#'؟

يوضع حرف الهروب '#' قبل علامة النسبة المراد البحث عنها مباشرة '#%'، بينما تبقى علامتا '%' في الطرفين للبحث الجزئي.

04

لماذا يطابق النص 'MySQL 8' الشرط WHERE title REGEXP 'SQL' حتى بدون وضع رموز في طرفي النمط؟

خلافاً لـ LIKE، ينجح REGEXP بمجرد وجود النمط في أي جزء من النص ما لم نستخدم محددي البداية ^ والنهاية $.

05

ما الذي يطابقه التعبير النمطي ^[0-9]{3}$ في MySQL؟

يربط ^ البداية، وتشترط [0-9]{3} ثلاثة أرقام، ويربط $ النهاية فلا يقبل أي حرف إضافي.

06

ما الفرق بين التعبيرين ^[0-9] و [^0-9] داخل REGEXP؟

خارج القوس المربع يعني ^ بداية النص، أما في أول موضع داخل القوس المربع فيعني نفي الفئة.

07

ما الكلمة المرادفة تماماً للمعامل REGEXP في MySQL؟

يوفر MySQL الكلمة المفتاحية RLIKE كمرادف مباشر ومطابق تماماً للمعامل REGEXP.

08

ما النتيجة التي يُعيدها التعبير ('ab' LIKE 'ab_') في MySQL؟

تطابق الشرطة السفلية حرفاً واحداً بالضبط، لذا يتطلب النمط 'ab_' نصاً مكوناً من 3 أحرف.