String result = ""; int i = 0; for(char c: word.toCharArray()) { if(Character.isDigit(c)) result += c; else if( i==word.length && (c == 'ه' || c == 'م' || c == 'ـ')) result += c; i++; }
هذا مثال عن برنامج يبحث في كل كلمة في الكتاب و يختبر هل هي رقم أو لأ و ثم يختبر هل يتبعها حرف “ه” أو “م” أو “ـ” (المد للحرف) و ثم يضيفة للحل، بما أن المشاكل اللتي تتعلق بالنصوص كثيرة في عالم كمبيوتر و يصعب معالجتها بسهولة لجأ المبرمجون لأبتكار حل في كيفية التعبير عن نمط معين في نص (مثل التاريخ في المثال أعلاه) لتسهيل البحث عنه و هي الـRegular Expressions أو التعابير القياسية، رجوعًا لمثالنا سيكون الحل كالتالي:
word.match("\\d{1,4}(م|ه|هـ|ميلادي|هجري)")
التعابير المنتظمة اذن هو النص اللذي في داخل الـword.match اللذي يعبر عن بحث “كل كلمة تبدأ برقم طوله من رقم 1 الى 4 ارقام، و ثم يأتي بعدها أي من ’م’ أو ’ه’ أو ’هـ’ أو ’ميلادي’ أو ’هجري’.
أرجو ان المثال كان مقنع لكي تبدأ باستخدامها في حياتك البرمجية، و شخصيًا فادتني كثيرا في بعض البرامج اللتي تتأكد من ادخال ارقام و غيرها، و عفتني من كتابة أسطر و أسطر من الكود لمعالجة String معين.

لكي تتعرف على التعابير المنتظمة يجب أن تتعلم أساسياتها، و بكل سهولة اذا وضعت في التعبير أي حرف أو رقم سيتم مطابقته مثل اذا كان التعبير “ac” سيتم مطابقة أي نص من “ac” ، ولكن يوجد رموز خاصة تطابق أشياء أخرى، مثل اللتي موجودة في الجدول التالي:
| الحرف | وظيفته | مثال |
| d\ | يطابق أي رقم مره واحده | يطابق “1” ، “3” |
| . (نقطة) | يطابق أي شيء، من أرقام حروف أو رموز | “3” ، “k” ، “#” |
| [ac34] | يطابق أي شيء داخل الأقواس [ ] | “a” “4” |
| Ammar^ | علامة ^ تعني البداية، و هذه ستطابق أي Ammar مكتوبه في بداية السطر. | ammar
Ammar my name is Ammar |
| s\ | سيطابق أي مسافه موجوده في نص | Hi my name is Ammarسيطابق كل اللي في الأحمر |
| $Ammar | يطابق أي كلمة في نهاية السطر | ammar
Ammar my name is Ammar |
| abc|def | العلامة “|” تعني “أو”، اذن فالتعبير سيطابق أي نص يحتوي على abc أو def | |
| *a | تعني تكرار من ولا مرة الى مالانهاية | aaa
aaaaaaaaaaaaa |
| ?aab | و هي علامة اختيارية تعني مره واحدة او ولا مره | aa
aab |
| +a | تطابق تكرار الحرف مره أو أكثر | a
aa aaa aaaaaaa |
| [a-e]
[2-6] [qwe] |
تعريف لمجموعة من الرموز اللتي تستطيع استخدامها، مثلا [a-e] يطابق الحروف من a الى e، و الثاني يقبل الأرقام من 2 الى 6 فقط، و الثالث سيطابق الحروف الثلاثة فقط. |
و يوجد غير الجدول اللذي سبق ذكره رموز كثيرة أخرى تغطي الكثير من احتياج البحث في النصوص، قد يعاني المبتدئون من فكرة معينه في التعابير القياسية، و هي كيفية مطابقة نص اذا كان رقم من 1 الى 50 مثلا، أي مبتديء سيعتقد انها ستحل باستخدام التعبير التالي:
[1-50]
بشكل عام هذا التعبير شكله جدا مألوف و قد تعتقد أن هذا الحل صحيح، لكن للأسف هذا لا يعني ما تعتقده، التعابير المنتظمة لا تعرف الأرقام كأرقام، انما تتعرف عليها كرموز ببغض النظر عن معنى الرقم، بعد أن تعرف هذه الحقيقة يجب أن تفكر مثل ما هي تراها، حيث أن التعبير في (تعبير 1) يعني “المجموعة اللتي تحتوي على الأرقام من 1 الى 5 بالأضافة الى الرقم صفر” يعني النص “1” سيتم مطابقته بالاضافة الى “2” و “0” و “3” و لن يقبل “50”، لتقبل رقم من 1 الى 50 سيكون التعبير كالتالي:
[1-9]|[1-4][0-9]|50
حيث اول مجموعة [9-1] سيغطي الأرقام من 1 الى 9، و المجموعة الثانية [1-4][0-9] ستغطي الأرقام من 10 الى 49 و الأخير سيغطي الرقم 50.
بعد هذه المقدمة المتواضعة عن التعابير القياسية أريد أن أشارككم ببعض التعابير اللتي أتوقع أنها ستفيدكم في عملكم خاصة لمطوري الويب عند التعرف على مدخلات مستخدمين، أرجو من القرّاء الذين قد استخدمو تعابير يتوقعون أن غيرهم قد يستفيد منها أن لا يبخل علينا منها:
| التعبير | الاستخدام | الفورمات |
| (0[1-9]|[1-2][0-9]|30)-(0[1-9]|1[0-2])-\d{4} | التعرف على التاريخ الهجري. | dd-mm-yyyy |
| 05\d{8} | التعرف على جوال سعودي | 0567846879 |
| [1-2]\d{9} | التعرف على رقم الهوية | 1234567890 |
المراجع
- http://www.regular-expressions.info: هذا الموقع يعتبر مرجع للتعابير القياسية
- http://regexlib.com/ يوجد في هذا الموقع مجموعة كبيرة من التعابير القياسية الجاهزة للاستخدام مثل تعابير العناوين و البريد الالكتروني و غيرها، و الجيد في الموقع انه يوجد تعليقات و نظام تقييم ممتاز ، و ميزة أخرى انه من السهل مشاركة الآخرين بالتعابير اللتي تتوقع انها ستفيد غيرك.
- http://www.amazon.com/Mastering-Regular-Expressions-Jeffrey-Friedl/dp/1565922573 كتاب يستحق الشراء ، يتكلم عن الموضوع بتعمق.