إتقان التعبيرات العادية المعقدة
تعد التعبيرات العادية (regex) أدوات متعددة الاستخدامات لمطابقة الأنماط ومعالجة النص. يستكشف هذا البرنامج التعليمي تقنيات التعبير العادي المتقدمة التي تساعدك على إدارة سيناريوهات معالجة النصوص المعقدة بشكل أكثر فعالية.
انظر وراء التأكيدات
تسمح لك تأكيدات Lookbehind بمطابقة النمط فقط إذا كان مسبوقًا بنمط آخر. وهذا مفيد لضمان السياق دون تضمينه في المباراة.
- نظرة خلفية موجبة
(?<=...)
: يطابق النمط فقط إذا كان مسبوقًا بالتعبير المحدد. - Lookbehind السلبي
(?<!...)
: يطابق النمط فقط إذا لم يكن مسبوقًا بالتعبير المحدد.
مثال:
(?<=Mr\.|Mrs\.)\s[A-Z]\w+
يطابق هذا التعبير العادي الأسماء التي يسبقها "Mr." أو "Mrs.".
الأنماط الشرطية
تسمح لك الأنماط الشرطية بمطابقة أنماط مختلفة بناءً على ما إذا تم استيفاء شرط معين. بناء الجملة هو (?(شرط)true-pattern|false-pattern)
.
مثال:
(\d{3}-)?\d{3}-\d{4}
يطابق هذا التعبير العادي أرقام الهواتف التي تحتوي على رمز المنطقة أو بدونه.
الروتينات الفرعية والتكرار
تمكنك الإجراءات الفرعية والتكرار من إعادة استخدام الأنماط داخل نفس التعبير العادي أو مطابقة الهياكل المتداخلة. وهذا مفيد بشكل خاص للبيانات المعقدة والمتداخلة.
مثال:
(?<group>\((?>[^()]+|(?&group))*\))
يطابق هذا التعبير العادي الأقواس المتوازنة مع المستويات المتداخلة.
محددات الكمية الملكية
تمنع محددات الكمية الملكية محرك التعبير العادي من التراجع، مما قد يؤدي إلى تحسين الأداء عندما تريد التأكد من عدم حدوث أي تراجع.
مثال:
\w++
يطابق هذا التعبير العادي تسلسلًا من أحرف الكلمات بطريقة ملكية، مما يعني أنه لن يتخلى عن الأحرف بمجرد مطابقتها.
استخدام العلامات لتحسين المطابقة
تقوم أعلام Regex بتعديل سلوك مطابقة النمط. بعض الأعلام الشائعة تشمل:
- 'i': مطابقة غير حساسة لحالة الأحرف.
- 'm': الوضع متعدد الأسطر، مما يؤثر على سلوك
^
و$
. - 's': وضع Dotall، مما يسمح لـ
.
بمطابقة أحرف السطر الجديد. - 'x': تجاهل المسافات البيضاء واسمح بالتعليقات داخل النمط لسهولة القراءة.
مثال:
/pattern/imsx
يطبق هذا النمط الأوضاع غير الحساسة لحالة الأحرف، والمتعددة الخطوط، والنقطة، والممتدة.
أمثلة في لغات البرمجة
فيما يلي بعض الأمثلة على استخدام التعبير العادي المتقدم في Python وJavaScript:
مثال بايثون
import re
# Match a name preceded by Mr. or Mrs.
pattern = r'(?<=Mr\.|Mrs\.)\s[A-Z]\w+'
text = 'Mr. Smith and Mrs. Johnson'
matches = re.findall(pattern, text)
for match in matches:
print('Match found:', match)
مثال جافا سكريبت
// Match a name preceded by Mr. or Mrs.
const pattern = /(?<=Mr\.|Mrs\.)\s[A-Z]\w+/g;
const text = 'Mr. Smith and Mrs. Johnson';
const matches = text.match(pattern);
if (matches) {
matches.forEach(match => console.log('Match found:', match));
}
خاتمة
تقنيات regex المتقدمة مثل تأكيدات البحث، والأنماط الشرطية، والإجراءات الفرعية، والتكرار، ومحددات الملكية تعمل على توسيع قدرات regex لمعالجة النصوص المعقدة. إن إتقان هذه المفاهيم يمكّنك من التعامل مع مهام المطابقة والمعالجة المتطورة بكفاءة ودقة أكبر.