هذه المقالة منقولة من مدونتي
نقلت لكم الجزء الثاني منها وهو الأهم بالنسبة لمن يعرف شيئاً عن regular expression
من لا يعرف التعابير المنتظمة فليراجع الجزء الأول على المدونة
هذه المقالة كانت من إيحاء الأخت jfriend
حيث لاحظت في مشروع النوتة التليفونات التي قامت به
مع احترافيتها في العمل إلا أن هذه الجزئية كانت تنقصها
كالعادة نقلتها لكم كما هي في المدونة
أترككم مع المقالة
السلام عليكم
بصراحة أنا غير ميال بالمرة لإكمال ما بدأت
لكنكم تجدوني مضطر على هذا
لأني عندما قرأت التدوينة السابقة
وجدتها لا توصل المعنى المطلوب
لا مشاكل بالنسبة لي
لكني لا أحب أن أترك ورائي ثقوب كبيرة
لا مانع من بعض الثقوب الصغيرة
لكني لا أحب الكبيرة منها
نعود إلى فحص المدخلات
وطريقة التعابير المنتظمة
ونكمل ما بدأناه في فحص المدخلات
نأخذ بعض الأمثلة على طريقة الاستفادة من الرموز السابق ذكرها
في المرة السابقة
مثال: رقم جوال على الصيغة التالية
0599-xxxxxxxx
حيث x عبارة عن خانة رقم
نلاحظ التالي الأرقام الأولى والشرطة ثابتين
فتكون طريقة الكتابة كالتالي
0599-\d{8}لماذا كتبت {8} ؟
لأن x تكرر في الرقم 8 مرات بالضبط
مثال2:الاسم الأول لشخص باللغة الإنجليزية
الأسماء دائماً لا تحتوي على أرقام أو رموز خاصة
اللاسم الأول دائماً يتميز بأن الحرف الأول كبير
وعلى هذا يكون التعبير المنتظم كالتالي
[A-Z]\w*
ملاحظة:
عندما نضع أياً من الرموز التي تتعلق بنوع المدخلات
دون أن نلحقها برمز من الرموز التي تتعلق بالتكرار
فإن هذا يعني أنه يجب أن تتكرر مرة واحدة
مثل الحرف الأول في المثال السابق لم نلحقه بأي رمز يتعلق البتكرار
ملاحظة أخرى:
(كثرت ملاحظاتك يا ممل -طبعاً الأخ عبده يتحدث-)
(استحملنا يا أستاذ عبده فهذه آخر واحدة -بالتأكيد أنا أرد على عبده-)
لا يمكننا أن نلحق أكثر من رمز من الرموز التي تتعلق بالتكرار
بالرموز التي تتعلق بنوع المدخلات
مثال خاطئ:
[A-Z]\w*+
الخطأ يكمن في وجود *+ متلاحقتين
مثال 3:
نريد التأكد من وجود الاسم الرباعي
طبعاً بنفس الطريقة كل اسم يتكون من الحرف الأول كبير وبعده مجموعة حروف
من المثال السابق نقوم بأخذ الصيغة
ونعدل عليها
([A-Z]\w* ){3}[A-Z]\w*لاحظوا أنا استخدمنا القوسين () لضم مجموعة من الرموز
كما قمنا بتكرار الاسماء الثلاثة الأولى مع المسافة
واستثنينا الاسم الأخير لوحده وذلك لعدم وجود مسافة
وأظن هكذا أصبح الموضوع أسهل
بصراحة هناك صيغ أصعب مثل الإيميل والروابط التشعبية
لكني أريد أن أوصل المفهوم ولست مهتماً بالتعقيد
على العموم سأضع لكم موقع في المراجع قد يساعدكم
بقي كيف يمكننا استخدامها في جافا
نفسي تحدثني أن أؤجلها إلى المرة القادمة
لكني أعلم أني لو أجلتها فلن ترونها أبداً
لهذا كان الله في عوني ولننهي هذا الموضوع اليوم
هناك طريقتين يمكن استخدامهما
1- إذا كنت تتعامل مع الفئة String
if(munitesJField.getText().matches("\\d{2}")){
System.out.println("yes");
}
else{
System.out.println("no");
}2- تتعامل مع الأخ String ,StringBuffer,StringBuilder...
كل الفئات التي ترث الفئة CharSequence
Pattern pa=Pattern.compile("\\d{2}");
CharSequence strBuff=new StringBuffer("12");
Matcher mat=pa.matcher(strBuff);
if(mat.matches()){
System.out.println("yes");
}
else{
System.out.println("no");
}الموضوع عائد لك لتستخدم أياً من الطريقتين
لكني شرحت الطريقة الثانية للمحترفين راجعوا هذه اللمحة وهذه اللمحة
كما أنها تحتوي على إمكانيات كثيرة بإمكانكم الإطلاع عليها
ملاحظة أخيرة:
ربما يستغرب البعض من كوني اكتب \\ بدلاً من \
هذا بسبب أن \ عبارة عن حرف ذو دلالة خاصة في جافا
حيث يكون مدمج مع الحروف الخاصة مثل \n
وقد أنهينا كلامنا ما رأيكم أن أحدثكم عن أمنا الغولة
-عبده-ما هذا الغباء يظن أنا في الابتدائية حتى نصدقه
ممممممممممم كنت أظنه موضوعاً جيداً بعد هذا الكم الكبير من العلم
ما رأيكم في الأخ أبو رجلة مسلوخة
-عبده-متخلف
من المتخلف يا ....
-عبده-ماذا ماذا تقول لم أسمع يا ماذا؟؟
يا أحلى عبده في الدنيا
-عبده-ناس لا تحترم نفسها إلا بالعين الحمراء
(بعد ذهاب الأخ عبده)
بيني وبينكم كنت أقصد ما قلته له
-أماني-وماذا قلت له
قلت له يا ....
-أماني-عبده الحق بيقول عليك يا...
طاخ طيخ طاخ اي يا أمي
سأكون معكم في اللمحة القادمة من المستشفى
طاخ طيخ طاخ بووووووووم
المراجع:
1- مقالة بعنوان التعابير المنتظمة ولغة جافا
Regular Expressions and the Java Programming Language
http://java.sun.com/developer/technicalArt...eases/1.4regex/
2-موقع موسوعة التعابير المنتظمة
تحياتي
