تعبيرات MYSQL العادية (REGEXP) مع بناء الجملة والأمثلة

ما هي التعبيرات العادية؟

تساعد التعبيرات العادية في البحث عن مطابقة البيانات complex معايير. لقد نظرنا إلى أحرف البدل في البرنامج التعليمي السابق. إذا كنت قد تعاملت مع أحرف البدل من قبل، فقد تتساءل عن سبب تعلم التعبيرات العادية بينما يمكنك الحصول على نتائج مماثلة باستخدام أحرف البدل. لأنه، بالمقارنة مع أحرف البدل، تسمح لنا التعبيرات العادية بالبحث عن بيانات تطابق المزيد من complex معيار.

بناء الجملة الأساسية

بناء الجملة الأساسي للتعبير العادي هو كما يلي

SELECT statements... WHERE fieldname REGEXP 'pattern';

هنا -

  • "اختر البيانات..." هو المعيار اختيار البيان
  • "أين اسم الحقل" هو اسم العمود الذي سيتم تنفيذ التعبير العادي عليه.
  • "نمط REGEXP" REGEXP هو عامل تشغيل التعبير العادي ويمثل "النمط" النمط الذي سيتم مطابقته بواسطة REGEXP. RLIKE هل مرادف لـ REGEXP ويحقق نفس النتائج مثل REGEXP. لتجنب الخلط بينه وبين عامل التشغيل LIKE، فإنه من الأفضل استخدام REGEXP بدلا من ذلك.

دعونا الآن نلقي نظرة على مثال عملي-

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

يبحث الاستعلام أعلاه عن كافة عناوين الأفلام التي تحتوي على رمز الكلمة فيها. لا يهم ما إذا كان "الرمز" موجودًا في بداية العنوان أو وسطه أو نهايته. طالما أنه موجود في العنوان فسيتم النظر فيه.

لنفترض أننا نريد البحث عن أفلام تبدأ بالحرف a أو b أو c أو d متبوعًا بأي عدد من الأحرف الأخرى، فكيف سنحقق ذلك. يمكننا استخدام تعبير عادي مع الأحرف الأولية لتحقيق النتائج المرجوة.

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

تنفيذ البرنامج النصي أعلاه في منضدة MySQL ضد myflixdb يعطينا فولوwing النتائج.

movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6

دعونا الآن نلقي نظرة فاحصة على التعبير العادي المسؤول عن النتيجة المذكورة أعلاه.

تعني '^[abcd]' علامة الإقحام (^) أنه يجب تطبيق تطابق النمط في البداية وتعني قائمة charlist [abcd] أن عناوين الأفلام التي تبدأ بـ a أو b أو c أو d فقط هي التي يتم إرجاعها في مجموعة النتائج الخاصة بنا.

دعونا نعدل البرنامج النصي أعلاه ونستخدم قائمة NOT ونرى النتائج التي سنحصل عليها بعد تنفيذ استعلامنا.

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

إن تنفيذ البرنامج النصي أعلاه في MySQL Workbench مقابل myflixdb يعطينا ما يليwing النتائج.

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
3 X-Men 2008
9 Honey mooners John Schultz 2005 8
16 67% Guilty 2012
17 The Great Dictator Chalie Chaplie 1920 7
18 sample movie Anonymous 8
19 movie 3 John Brown 1920 8

دعونا الآن نلقي نظرة فاحصة على التعبير العادي المسؤول عن النتائج المذكورة أعلاه.

'^[^abcd]' علامة الإقحام (^) تعني أنه يجب تطبيق تطابق النمط في البداية وقائمة الأحرف [^abcd] تعني أن عناوين الأفلام التي تبدأ بأي من الأحرف المرفقة مستبعدة من مجموعة النتائج.

أحرف التعبير العادية

ما نظرنا إليه في المثال أعلاه هو أبسط أشكال التعبير العادي. دعونا الآن نلقي نظرة على تطابقات نمط التعبير العادي الأكثر تقدمًا. لنفترض أننا نريد البحث عن عناوين أفلام تبدأ بالنمط "كود" فقط باستخدام تعبير عادي، كيف نفعل ذلك؟ الجواب هو الحروف الفوقية. إنها تسمح لنا بضبط نتائج البحث عن الأنماط باستخدام التعبيرات العادية.

فحم الوصف مثال
* النجمة (*) يتم استخدام الحرف الأولي لمطابقة صفر (0) أو أكثر من مثيلات السلاسل التي تسبقه اختر * من الأفلام حيث العنوان REGEXP 'da*'؛ سوف تعطي جميع الأفلام التي تحتوي على شخصيات "دا". على سبيل المثال، شفرة دافنشي، بنات أبي الصغيرات.
+ زائد (+) يتم استخدام الحرف الأولي لمطابقة مثيل واحد أو أكثر من السلاسل التي تسبقه. حدد * من "الأفلام" حيث "العنوان" REGEXP "mon+"؛ سيعطي جميع الأفلام التي تحتوي على شخصيات "mon". على سبيل المثال، الملائكة والشياطين.
? والسؤال(؟) يتم استخدام الحرف الأولي لمطابقة الصفر (0) أو مثيل واحد من السلاسل التي تسبقه. SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; سوف تعطي جميع الفئات التي تحتوي على سلسلة كوم. على سبيل المثال، كوميديا، كوميديا ​​رومانسية.
. نقطة (.) يتم استخدام الحرف الأولي لمطابقة أي حرف مفرد باستثناء السطر الجديد. اختر * من الأفلام حيث `year_released` REGEXP '200.'; سيعطي جميع الأفلام التي تم إصدارها في السنوات التي تبدأ بالحرف "200" متبوعًا بأي حرف واحد. على سبيل المثال، 2005,2007,2008،XNUMX،XNUMX إلخ.
[اي بي سي] شارليست [اي بي سي] يستخدم لمطابقة أي من الأحرف المرفقة. حدد * من "الأفلام" حيث "العنوان" REGEXP "[vwxyz]"؛ سيعطي جميع الأفلام التي تحتوي على أي شخصية منفردة في "vwxyz". على سبيل المثال، X-Men، Da Vinci Code، وما إلى ذلك.
[^ أبك] قائمة الأغاني [^abc] يتم استخدامه لمطابقة أي أحرف باستثناء الأحرف المرفقة. حدد * من "الأفلام" حيث "العنوان" REGEXP '^[^vwxyz]'؛ سيعطي جميع الأفلام التي تحتوي على شخصيات غير تلك الموجودة في "vwxyz".
[من الألف إلى الياء] [من الألف إلى الياء] يستخدم لمطابقة أي حرف كبير. حدد * من "الأعضاء" حيث "العنوان_البريدي" REGEXP '[AZ]'؛ سيعطي جميع الأعضاء الذين لديهم عنوان بريدي يحتوي على أي حرف من الألف إلى الياء. على سبيل المثال، جانيت جونز ذات العضوية رقم 1.
[az] [az] يستخدم لمطابقة أي حرف صغير حدد * من "الأعضاء" حيث "العنوان_البريدي" REGEXP '[az]'؛ سيعطي جميع الأعضاء الذين لديهم عناوين بريدية تحتوي على أي حرف من الألف إلى الياء. على سبيل المثال، جانيت جونز ذات العضوية رقم 1.
[0-9] [0-9] يستخدم لمطابقة أي رقم من 0 إلى 9. اختر * من "الأعضاء" حيث "رقم_الاتصال" REGEXP "[0-9]" سيعطي جميع الأعضاء الذين أرسلوا أرقام اتصال تحتوي على الأحرف "[0-9]" على سبيل المثال، روبرت فيل.
^ علامة الإقحام (^) يستخدم لبدء المباراة في البداية. حدد * من "الأفلام" حيث "العنوان" REGEXP '^[cd]'؛ يعطي جميع الأفلام التي يبدأ عنوانها بأي من الشخصيات الموجودة في "cd". على سبيل المثال، Code Name Black وDaddy's Little Girls وDa Vinci Code.
| شريط عمودي (|) يستخدم لعزل البدائل. حدد * من "الأفلام" حيث "العنوان" REGEXP '^[cd]|^[u]'; يعطي جميع الأفلام التي يبدأ عنوانها بأي من الأحرف الموجودة في "cd" أو "u". على سبيل المثال، Code Name Black، وDaddy's Little Girl، وDa Vinci Code، وUnderworld – Awakening.
[[:<:]] [[:<:]] يطابق بداية الكلمات. حدد * من "الأفلام" حيث "العنوان" REGEXP '[[:<:]]لـ'؛

يعطي جميع الأفلام بعناوين تبدأ بالشخصيات. على سبيل المثال: نسيان سارة مارشال.

[[:>:]] [[:>:]] يطابق نهاية الكلمات. SELECT * FROM `movies` WHERE `title` REGEXP 'ack[[:>:]]';

يعطي جميع الأفلام التي تنتهي عناوينها بالحرف "ack"

.على سبيل المثال، الاسم الرمزي أسود.

[:فصل:] [:فصل:] يطابق فئة الأحرف أي

[:ألفا:] لمطابقة الحروف، [:فضاء:] لتتناسب مع المساحة البيضاء، [: نقطة:] يتم مطابقة علامات الترقيم و[:upper:] لأحرف الطبقة العليا.

حدد * من "الأفلام" حيث "العنوان" REGEXP '[:alpha:]'؛

يعطي جميع الأفلام التي تحتوي عناوينها على أحرف فقط

على سبيل المثال، نسيان سارة مارشال وX-Men وما إلى ذلك.

سيتم حذف فيلم مثل Pirates of the Caribbean 4 بواسطة هذا الاستعلام.

يتم استخدام الشرطة المائلة العكسية (\) كحرف هروب. إذا أردنا استخدامه كجزء من النمط في تعبير عادي، فيجب علينا استخدامه double خطوط مائلة عكسية (\\)

نبذة عامة

  • توفر التعبيرات العادية مطابقة نمطية قوية ومرنة يمكن أن تساعدنا في تنفيذ أدوات البحث القوية لأنظمة قواعد البيانات الخاصة بنا.
  • REGEXP هو عامل التشغيل المستخدم عند إجراء تطابقات نمط التعبير العادي. RLIKE هو مرادف
  • تدعم التعبيرات العادية عددًا من الأحرف الأولية التي تتيح المزيد من المرونة والتحكم عند إجراء مطابقة الأنماط.
  • يتم استخدام الشرطة المائلة العكسية كحرف هروب في التعبيرات العادية. يتم اعتباره فقط في تطابق النمط إذا double استخدمت خطوط مائلة عكسية.
  • التعبيرات العادية ليست حساسة لحالة الأحرف.