الغوص بشكل أعمق في التعبيرات العادية المتقدمة
تعد التعبيرات العادية (regex) أدوات قوية لمطابقة الأنماط ومعالجة النص. بالانتقال إلى ما هو أبعد من الأساسيات، يستكشف هذا البرنامج التعليمي مفاهيم التعبير العادي المتقدمة للتعامل مع مهام معالجة النصوص المعقدة.
تأكيدات البحث المتقدمة
تسمح لك تأكيدات البحث بمطابقة النمط فقط إذا كان مسبوقًا أو متبوعًا بنمط آخر، دون تضمين النص المحيط في المطابقة.
- نظرة إيجابية إيجابية
(?=...)
: تضمن تطابق النمط فقط إذا كان متبوعًا بالتعبير المحدد. - نظرة سلبية
(؟!...)
: يضمن تطابق النمط فقط إذا لم يكن متبوعًا بالتعبير المحدد. - البحث الخلفي الإيجابي
(?<=...)
: يضمن تطابق النمط فقط إذا كان مسبوقًا بالتعبير المحدد. - Lookbehind السلبي
(?<!...)
: يضمن تطابق النمط فقط إذا لم يسبقه التعبير المحدد.
مثال:
(?<=\$)\d+
يطابق هذا التعبير العادي الأرقام التي تسبقها علامة الدولار.
المجموعات الذرية
تمنع المجموعات الذرية التراجع بمجرد إجراء محاولة مطابقة داخل المجموعة. إنها مفيدة لتحسين الأداء عن طريق تجنب التراجع غير الضروري.
مثال:
(?>\d+)\b
يطابق هذا التعبير العادي سلسلة من الأرقام كمجموعة ذرية، مما يمنع التراجع.
المراجع الخلفية
تسمح لك المراجع الخلفية بإعادة استخدام مجموعة تم التقاطها مسبقًا في نمط التعبير العادي الخاص بك. وهذا مفيد لمطابقة السلاسل الفرعية المتكررة.
مثال:
(\b\w+)\s+\1
يطابق هذا التعبير العادي كلمة متبوعة بنفس الكلمة.
المجموعات المسماة
تسمح لك المجموعات المُسماة بتعيين أسماء لمجموعات الالتقاط، مما يجعل التعبير العادي الخاص بك أكثر قابلية للقراءة والرجوع إلى البيانات المطابقة بشكل أسهل.
مثال:
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
يطابق هذا التعبير العادي التواريخ بالتنسيق YYYY-MM-DD ويسمي مجموعات السنة والشهر واليوم.
أنماط العودية
تسمح الأنماط العودية للتعبير العادي بمطابقة الهياكل المتداخلة، مثل الأقواس المتوازنة. هذه ميزة متقدمة تدعمها بعض محركات regex.
مثال:
\((?>[^()]+|(?R))*\)
يطابق هذا التعبير العادي الأقواس المتوازنة.
استخدام Regex في لغات البرمجة المختلفة
يتم دعم Regex في العديد من لغات البرمجة، وغالبًا ما يكون ذلك مع اختلافات طفيفة في بناء الجملة والقدرات. فيما يلي أمثلة في Python وJavaScript:
مثال بايثون
import re
# Match a word followed by the same word
pattern = r'(\b\w+)\s+\1'
text = 'hello hello world'
match = re.search(pattern, text)
if match:
print('Match found:', match.group())
else:
print('No match found')
مثال جافا سكريبت
// Match a word followed by the same word
const pattern = /(\b\w+)\s+\1/;
const text = 'hello hello world';
const match = text.match(pattern);
if (match) {
console.log('Match found:', match[0]);
} else {
console.log('No match found');
}
خاتمة
يمكن لمفاهيم التعبير العادي المتقدمة مثل تأكيدات البحث والمجموعات الذرية والمراجع الخلفية والمجموعات المسماة والأنماط العودية أن تعزز بشكل كبير قدرات معالجة النص لديك. من خلال إتقان هذه التقنيات، يمكنك التعامل مع مهام المطابقة والتلاعب المعقدة بكفاءة ودقة أكبر.