إتقان التعبيرات العادية: كيفية مطابقة سلسلة تبدأ بفرعية معينة ولا تنتهي بفرعية أخرى
تعتبر التعبيرات العادية (Regex) أدوات قوية للغاية لمعالجة النصوص ومطابقة الأنماط. سواء كنت مطورًا ذو خبرة أو مبتدئًا، فإن فهم كيفية استغلال قدرات التعبيرات العادية يمكن أن يوفر لك الكثير من الوقت والجهد. في هذه المقالة، سنركز على مشكلة محددة: إنشاء نمط تعبير عادي يطابق سلسلة تبدأ بفرعية معينة ولا تنتهي بأخرى.
المشكلة
افترض أنك تريد التحقق من صحة السلاسل في تطبيقك. يجب عليك التأكد من:
- يجب أن تبدأ السلسلة بفرعية معينة، مثل
"foo"
. - يجب ألا تنتهي السلسلة بفرعية أخرى، مثل
"bar"
.
على سبيل المثال، تشمل المطابقات الصحيحة ما يلي:
foo123
foolish
foo
بينما ستبدو المطابقات غير الصحيحة كالتالي:
foobar
foo bar
قد تكون هذه المسألة معقدة، خاصة إذا كنت تستخدم التعبيرات العادية في جافا أو أي لغة برمجة أخرى تتبع نفس بناء الجملة للتعبيرات العادية.
الحل
لتحقيق ذلك، يمكننا استخدام تصريحات النظر السلبي في التعبيرات العادية. يسمح لنا النظر السلبي بتحديد أن عنصرًا معينًا (في حالتنا، نهاية السلسلة) يجب ألا يتبع الفرعية المحددة.
بناء نمط التعبير العادي
بالنسبة لسيناريو محدد مثل هذا، يمكننا تعريف نمط التعبير العادي بالشكل التالي:
foo.*(?<!bar)$
تحليل النمط
foo
: يبدأ النمط بالحروف الحرفية “foo”..*
: النقطة.
تطابق أي حرف (باستثناء محدد نهاية السطر) والنجمة*
تعني صفر أو أكثر من حدوث ذلك الحرف.(?<!bar)
: هذه هي تصريح النظر السلبي. إنها تتحقق من أن السلسلة لا تنتهي بـ “bar”.$
: هذه تؤكد أننا في نهاية السطر أو السلسلة.
النقاط الرئيسية التي يجب تذكرها
- النظر السلبي: هذه الميزة في التعبيرات العادية تتيح لك تكوين الشروط بناءً على ما ليس موجودًا في نهاية السلسلة.
- القابلية للنقل: يعمل نمط التعبير العادي المقدم بفعالية في جافا وقد تم التحقق من عمله أيضًا في لغة C#.
مثال على الاستخدام في جافا
إليك كيف يمكنك استخدام هذا التعبير العادي في برنامج جافا:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String regex = "foo.*(?<!bar)$";
String[] testStrings = { "foobar", "foo123", "foolish", "foo bar" };
for (String testString : testStrings) {
if (Pattern.matches(regex, testString)) {
System.out.println(testString + " matches.");
} else {
System.out.println(testString + " does not match.");
}
}
}
}
الخاتمة
فهم كيفية التلاعب بالتعبيرات العادية لمطابقة السلاسل بناءً على شروط معينة يتيح لك تنفيذ تحقق أكثر فعالية في تطبيقاتك. من خلال استخدام النظر السلبي، يمكنك التأكد من أن سلاسك تلبي المعايير المطلوبة دون أن تعيقها النهايات غير المرغوب فيها.
دع معرفتك بالتعبيرات العادية تعزز ممارسات البرمجة لديك، وستجد نفسك تبسط العديد من المهام المعقدة في حل المشكلات خلال رحلتك في تطوير البرمجيات.