إطلاق العنان لقوة التعبيرات العادية المتقدمة
توفر التعبيرات العادية (regex) أدوات قوية لمطابقة الأنماط ومعالجة النص. تستكشف هذه المقالة مفاهيم التعبير العادي المتقدمة التي تمكّنك من معالجة مهام معالجة النصوص المعقدة بدقة وكفاءة.
تأكيدات Lookahead و Lookbehind
تسمح لك تأكيدات Lookahead و lookbehind بمطابقة النمط فقط إذا كان مسبوقًا أو متبوعًا بنمط آخر. إنها مفيدة لضمان السياق دون تضمينه في المباراة.
- نظرة إيجابية إيجابية
(?=...)
: تضمن تطابق النمط فقط إذا كان متبوعًا بالتعبير المحدد. - نظرة سلبية
(؟!...)
: يضمن تطابق النمط فقط إذا لم يكن متبوعًا بالتعبير المحدد. - البحث الخلفي الإيجابي
(?<=...)
: يضمن تطابق النمط فقط إذا كان مسبوقًا بالتعبير المحدد. - Lookbehind السلبي
(?<!...)
: يضمن تطابق النمط فقط إذا لم يسبقه التعبير المحدد.
مثال:
(?<=Mr\.\s|Mrs\.\s)[A-Z]\w+
يطابق هذا التعبير العادي الأسماء التي يسبقها "Mr." أو "Mrs.".
الأنماط الشرطية
تسمح لك الأنماط الشرطية بمطابقة أنماط مختلفة بناءً على ما إذا تم استيفاء شرط معين. بناء الجملة هو (?(شرط)true-pattern|false-pattern)
.
مثال:
(\d{3}-)?(?(1)\d{3}-\d{4}|\d{7})
يطابق هذا التعبير العادي أرقام الهواتف التي تحتوي على رمز المنطقة أو بدونه.
الروتينات الفرعية والتكرار
تمكنك الإجراءات الفرعية والتكرار من إعادة استخدام الأنماط داخل نفس التعبير العادي أو مطابقة الهياكل المتداخلة. وهذا مفيد بشكل خاص للبيانات المعقدة والمتداخلة.
مثال:
(?<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 لمعالجة النصوص المعقدة. إن إتقان هذه المفاهيم يمكّنك من التعامل مع مهام المطابقة والمعالجة المتطورة بكفاءة ودقة أكبر.