English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في الفصول السابقة، لقد عرفنا أن MySQL يمكنه LIKE ...% للتناسب المبدئي.
يدعم MySQL أيضًا تطابق تعبيرات الترميز النمطية الأخرى، ويستخدم MySQL عميل REGEXP للتناسب النمطي بالترميز النمطي.
إذا كنت تعرف PHP أو Perl، فإن الأمر بسيط جدًا، لأن تطابق تعبيرات الترميز النمطية في MySQL مشابه لذلك في هذه اللغات البرمجية.
يمكن تطبيق الأنماط الموجودة في الجدول أدناه على عميل REGEXP.
نموذج | وصف |
---|---|
^ | يطابق بداية النص المدخل. إذا تم تعيين خاصية Multiline لـ RegExp، يمكن أن تطابق ^ أي موقع بعد '\n' أو '\r'. |
$ | يطابق نهاية النص المدخل. إذا تم تعيين خاصية Multiline لـ RegExp، يمكن أن تطابق $ أي موقع قبل '\n' أو '\r'. |
. | يطابق أي حرف واحد غير 'n'. لطابق أي حرف بما في ذلك '\n'، استخدم نموذج مثل '[.\n]'. |
[...] | مجموعة الحروف. يطابق أي حرف معين من المجموعة. على سبيل المثال، '[abc]' يمكن تطابق مع 'a' في 'plain'. |
[^...] | مجموعة الحروف السلبية. يطابق أي حرف غير معين. على سبيل المثال، '[^abc]' يمكن تطابق مع 'p' في 'plain'. |
p1|p2|p3 | يطابق p1 أو p2 أو p3. على سبيل المثال، 'z|food' يمكن تطابق مع 'z' أو 'food'. '(z|f)ood' يمكن تطابق مع 'zood' أو 'food'. |
* | يطابق المقدمة من التعبيرات الفرعية صفر مرة أو مرات عديدة. على سبيل المثال، 'zo*' يمكن تطابق مع 'z' و 'zoo'. '*' مساوٍ ل {0,}. |
+ | يطابق المقدمة من التعبيرات الفرعية مرة واحدة أو مرات عديدة. على سبيل المثال، 'zo+' يمكن تطابق مع 'zo' و 'zoo'، ولكنه لا يمكن تطابق مع 'z'. '+' مساوٍ ل {1,}. |
{n} | n هو عدد غير سالب. يتناسب مع n مرة. على سبيل المثال، 'o{2}' لا يمكنه التطابق مع 'o' في 'Bob'، ولكنه يمكن تطابق مع o في 'food' مرتين. |
{n,m} | m و n كلاهما أرقام غير سالبة، حيث n <= m. يجب التطابق مع m مرة على الأقل و m مرة على الأكثر. |
بعد فهم المتطلبات العادية للعبارات النمطية، يمكننا كتابة جمل SQL مع العبارات النمطية تبعًا لمتطلباتنا. سنقوم الآن بعرض بعض الأمثلة الصغيرة (اسم الجدول: person_tbl) لزيادة فهمنا:
البحث عن جميع البيانات التي تبدأ بكلمة 'st':
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
البحث عن جميع البيانات التي تنتهي بكلمة 'ok':
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
البحث عن جميع البيانات التي تحتوي على كلمة 'mar':
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
البحث عن جميع البيانات التي تبدأ بمحرف من الياء أو تؤدي بنهاية بكلمة 'ok':
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';