في هذا الدرس 6تصفّح المواضيع
يُنفّذ المعامل LIKE مطابقة الأنماط النصية باستخدام رمزي بحث قياسيين. يطابق رمز النسبة المئوية % أي سلسلة مكونة من صفر أو أكثر من الأحرف.
- مطابقة البادئة
'MySQL%': تطابق النصوص التي تبدأ بكلمةMySQL، ويستطيع محرك InnoDB هنا استخدام فهرس B-Tree بكفاءة لأن بداية النص معروفة. - مطابقة النهاية أو الوسط
'%SQL%': وضع الرمز%في بداية النمط يمنع استخدام الفهرس العادي ويجبر المحرك على فحص الصفوف واحداً تلو الآخر.
انتبه إلى أن الرمز % لا يطابق القيمة الفارغة NULL أبداً؛ فالتعبير NULL LIKE '%' يُعيد NULL.
البحث بالرموز البديلة في LIKE والتعابير النمطية REGEXP
-- 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، تطابق الشرطة السفلية الواحدة حرفاً كاملاً متعدد البايتات وليس بايتاً واحداً فقط.
-- 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%';
تحتوي كثير من البيانات الفعلية على علامة النسبة المئوية مثل '20% Off' أو الشرطة السفلية مثل 'role_admin'. بدون تحييد هذه الرموز سيعاملها MySQL كرموز بحث عشوائية.
- التحييد الافتراضي بالشرطة العكسية: كتابة
\%أو\_تطابق الرمز الحرفي نفسه بدلاً من اعتباره رمزاً بديلاً. - تحديد حرف هروب مخصص عبر
ESCAPE: كتابةLIKE '%20!%%' ESCAPE '!'تتيح لك اختيار رمز واضح مثل!لتحييد الرمز الذي يليه مباشرة دون تعقيد الشرطات العكسية المزدوجة.
يضمن استخدام ESCAPE الصريحة وضوح النمط وتوافقه القياسي عبر مختلف محركات قواعد البيانات.
-- 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 '!';
عندما لا تكفي رموز LIKE البسيطة لوصف نمط النص المطلوب، يوفر MySQL 8 محرك التعابير النمطية المتقدم ICU الداعم لترميز Unicode الكامل عبر المعامل REGEXP أو مرادفه RLIKE.
- مطابقة جزئية افتراضياً: خلافاً للمعامل
LIKEالذي يشترط مطابقة كامل النص، ينجح المعاملREGEXPبمجرد العثور على النمط في أي موضع داخل السلسلة النصية. - التخيير والتكرار الكمي: يمكنك استخدام رمز البدائل
|مثل'(error|timeout)'ومحددات التكرار مثل{3,5}و+و?.
كما يوفر MySQL 8 الدالة REGEXP_LIKE(expr, pat, mode) التي تقبل المعامل 'c' لحساسية الأحرف أو 'i' لتجاهل حالة الأحرف.
-- 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} (أربعة بالضبط) على الفئة أو القوس الذي يسبقها مباشرة.
-- 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 في MySQL 8 من حيث نطاق المطابقة والرموز المدعومة واستخدام الفهارس:
| وجه المقارنة | المعامل LIKE | المعامل REGEXP / RLIKE |
|---|---|---|
| نطاق المطابقة الافتراضي | كامل النص (إلا عند إضافة %) | جزئي في أي موضع (إلا عند وضع ^...$) |
| الرموز المدعومة | % (صفر فأكثر)، _ (حرف واحد) | . و * و + و ? و {n,m} و [...] و | و ^ و $ |
| استخدام فهرس B-Tree | يستخدم الفهرس مع البادئة الثابتة 'abc%' | لا يستخدم فهرس النطاق العادي B-Tree |
| تحييد الرموز الخاصة | عبر \% أو جملة ESCAPE '!' | عبر الشرطة العكسية القياسية في التعابير النمطية |
| أفضل حالة استخدام | البحث بالبادئة أو الاحتواء النصي البسيط | التحقق من الصيغ المهيكلة والأنماط المركّبة |
ملخص الدرس: تعلّمت في هذا الدرس مطابقة الأنماط النصية عبر LIKE برمزي % و _، وتحييد الرموز الحرفية بجملة ESCAPE، واستخدام التعابير النمطية المتقدمة REGEXP وفئات الأحرف ومحددات الأطراف.
الخطوة التالية والدرس القادم: نختتم هذه الوحدة في الدرس القادم بتعلّم فحص القيم الفارغة عبر IS NULL وترتيب النتائج بجملة ORDER BY وتقسيم الصفحات عبر LIMIT و OFFSET.
-- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 LIKE Operator معامل المطابقة النصية LIKE
- معامل في SQL لمطابقة السلاسل النصية باستخدام الرمز % لأي عدد من الأحرف والرمز _ لحرف واحد.
- للمراجعة
- 02 ESCAPE Clause جملة الهروب ESCAPE
- جملة اختيارية مع LIKE تحدد حرفاً خاصاً لتحييد رمزي % و _ والبحث عنهما كحروف عادية.
- للمراجعة
- 03 REGEXP / RLIKE معامل التعابير النمطية REGEXP
- معامل التعابير النمطية في MySQL 8 المبني على مكتبة ICU لدعم المطابقة النصية المتقدمة.
- للمراجعة
- 04 Boundary Anchors (^ and $) محددا البداية والنهاية (^ و $)
- رمزان في التعابير النمطية يربطان المطابقة ببداية النص (^) ونهايته ($).
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات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
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
اكتب استعلام SELECT على جدول users يعرض user_id و email للمستخدمين الذين يبدأ بريدهم الإلكتروني بكلمة 'support'.
-
اكتب استعلام SELECT على جدول branches يعرض branch_id و postal_code للفروع التي يتكون رمزها البريدي من 4 أرقام بالضبط ('^[0-9]{4}$').
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الفرق بين الرمز % والرمز _ داخل نمط البحث LIKE في MySQL؟
في جملة LIKE يطابق الرمز % أي سلسلة من صفر أو أكثر من الأحرف، بينما يطابق _ حرفاً واحداً فقط.
أي نمط من أنماط LIKE التالية يتيح لمحرك InnoDB الاستفادة من فهرس B-Tree العادي على العمود؟
البادئة الثابتة 'mysql%' تمكّن محرك InnoDB من تحديد نقطة البداية في شجرة B-Tree وتنفيذ مسح نطاقي سريع.
كيف تبحث عن النصوص التي تحتوي على العبارة الحرفية '50%' باستخدام جملة ESCAPE '#'؟
يوضع حرف الهروب '#' قبل علامة النسبة المراد البحث عنها مباشرة '#%'، بينما تبقى علامتا '%' في الطرفين للبحث الجزئي.
لماذا يطابق النص 'MySQL 8' الشرط WHERE title REGEXP 'SQL' حتى بدون وضع رموز في طرفي النمط؟
خلافاً لـ LIKE، ينجح REGEXP بمجرد وجود النمط في أي جزء من النص ما لم نستخدم محددي البداية ^ والنهاية $.
ما الذي يطابقه التعبير النمطي ^[0-9]{3}$ في MySQL؟
يربط ^ البداية، وتشترط [0-9]{3} ثلاثة أرقام، ويربط $ النهاية فلا يقبل أي حرف إضافي.
ما الفرق بين التعبيرين ^[0-9] و [^0-9] داخل REGEXP؟
خارج القوس المربع يعني ^ بداية النص، أما في أول موضع داخل القوس المربع فيعني نفي الفئة.
ما الكلمة المرادفة تماماً للمعامل REGEXP في MySQL؟
يوفر MySQL الكلمة المفتاحية RLIKE كمرادف مباشر ومطابق تماماً للمعامل REGEXP.
ما النتيجة التي يُعيدها التعبير ('ab' LIKE 'ab_') في MySQL؟
تطابق الشرطة السفلية حرفاً واحداً بالضبط، لذا يتطلب النمط 'ab_' نصاً مكوناً من 3 أحرف.