Mustafa AlSulTani نشر 11 أكتوبر 2015 أرسل تقرير نشر 11 أكتوبر 2015 السلام عليكم نصبت إحدى إضافات الووردبريس الاجنبية ووجدت كلمة RegEx بأحد الخيارات ولم أجد مُحتوى عربي يشرح الكلمة او إلامَ تُشير؟ 1 اقتباس
1 Wael Aljamal نشر 5 نوفمبر 2021 أرسل تقرير نشر 5 نوفمبر 2021 regex أو regexp هي طريقة لمطابقة السلاسل النصية بشكل كامل أو جزئي بالاعتماد على خليط من المحارف والأرقام و رموز الاستبدال والتكرار التي تمثل مجتمعة هيكلية لعمل نمط تطابق مع نصوص لاستخراج الكلمات المتشابهة التي تنتمي لنفس نمط البحث. يطلق عليها باللغة العربية التعابير النمطية أو التعابير المنتظمة أو أحرف البدل. في حال التعامل معها للبحث في نص باللغة الإنكليزية نستخدم محارف جدول ASCII أي الحروف الإنكليزية abcd ... a-z ABCD ... A-Z 123 0-9 !@#$%^&*() .. أما في حال البحث في لغات أخرى، تختلف قيم المحارف حسب اللغات الطبيعية فمثلاً للبحث في نص باللغة العربية نستخدم مجال محارف Unicode وغيره حسب اللغة. محارف التحكم الأساسية: محرف (أو) بشكل محرف العمود ( "|" ) المنطقي Boolean ويُستخدم لإيجاد ناتج بحث من أحد خيارين ويكثر استخدامه في الكلمات التي يمكن أن تُكتب بشكلين أو أكثر مثل الكلمة الإنكليزية للون الرمادي gray | grey فوجود هذا التعبير، يعمل على البحث عن أحد الشكلين للكلمة. التجميع Grouping باستخدام ( ) الأقواس المدورة / الدائرية حيث نقوم بالتعبير عن مجموعة بحث جزئية مثلاً وضع gr(a|e)y هنا سيتم عمل مطابقة لأول حرفين g - r ثم مجموعة اختيارية من a - e ثم y محددات الكميات / التكرارات: إشارة الاستفهام ? وهي محرف تحكم، نكتبها بعد النمط الجزئي أو الحرف مثلاً وهي تقبل ظهور محرف أو عدم ظهوره ضمن سلسلة نصية (أي يكون لدينا محرف اختياري) أي يمكن للمحرف أن يتواجد 0 أو 1 مرة ليتم قبول النمط مثل كلمة اللون باللغة الإنكليزية colou?r حيث يمكن كتابتها بشكلين مع أو بدون حرف u وكلاً من ناتجي البحث مقبول النجمة * تقبل وجود النمط / المحرف بعدد تكرارات من 0 أي يمكن ألا يظهر، إلى اللانهاية (أي بدون تحديد عدد أعظمي لتكرار النمط الجزئي) مثلا النمط ab*c ووجود النجمة بعد حرف b أي يمكن أن يتكرر b من 0 إلى عدد غير محدد من المرات حيث يقبل السلاسل التالية مثلًا ac, abc, abbc, abbbc عدد مرات ظهور b غير محدد. إشارة الجمع أو زائد + تقبل وجود النمط / المحرف بعدد تكرارات من 1 أي يمكن أن يظهر المحرف مرة واحدة على الأقل، إلى اللانهاية (أي بدون تحديد عدد أعظمي لتكرار النمط الجزئي) مثلا النمط ab+c ووجود زائد بعد حرف b أي يمكن أن تم تكرار b من 1 إلى عدد غير محدد من المرات حيث يقبل السلاسل التالية مثلًا abc, abbc, abbbc عدد مرات ظهور b مرة على الأقل، أي على عكس النجمة الحد الأدنى هو تكرار واحد على الأقل. مجال تكرار محدد، يمكن استعمال الأقواس المجعدة curly brackets { } مع وضع رقمين بينهما فاصلة يمثلان الحد الأدنى والأعلى للتكرار المسموع به للمجموعة الجزئية أو المحرف {n} تكرار بالضبط n مطابقة {min,} تحديد الحد الأدنى {,max} تحديد الحد الأعلى {min,max} تحديد مجال بين حد أدنى و حد أعلى مثلاً للبحث عن hello يمكن كتابة hel{2}o => hello ^^ سيتم البحث عن تطابق للنمط مع حرفين L النقطة "." وتعبر عن محرف وحيد غير محدد أي محرف ممكن أن يظهر مثلا a.c يمكن أن يظهر بين a و b أي محرف آخر مثل aac abc acc aec adc aoc ^ متغير قبول محرف من عدة محارف باستخدام الأقواس المربعة [ ] مثلا في حال كتابة [abc] => سيتم قبول أحد الرموز التالية a أو b أو c تحديد مجال من المحارف المتتالية أبجدياً أو رقميا المطابقة لأحد الأحرف <= المجال a-c => a b c b-e => b c d e A-D => A B C D A-Z => جميع الأحرف بشكل كبير capital a-z => جميع الأحرف بشكل صغير small 0-9 => أي رقم . عدم انتماء لمجال، لا نريد للحرف الحالي أن يكون abc نكتب [^abc] يختلف تطبيقه من لغة برمجة لأخرى بشكل بيسط وحسب المكتبة التي تريد استعمالها لكل منها يمثل المحرف ^ بداية النمط ويمثل $ نهايته مثال لاختبار هل النص التالي يمثل بريد الكتروني "^ [a-zA-Z0-9_.+-]+ @ [a-zA-Z0-9-]+ \. [a-zA-Z0-9-.]+ $" ^ ^^^^^^^^^^^^^^^^ ^ ^^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^ 1 2 3 4 5 6 7 حيث نلاحظ محرف بداية ^ مجال من أحرف ومحارف مكرر على الأقل مرة واحدة (كل حرف إما يتبع لمجال أو يكون _ + - .) محرف @ مجال مثل 2 النقطة نفسها مع محرف هروب مجال محارف آخر محرف النهاية $ 2 اقتباس
2 سامح أشرف نشر 5 نوفمبر 2021 أرسل تقرير نشر 5 نوفمبر 2021 ماهو الـ Regex؟ كلمة RegEx هي إختصار للعبارة Regular Expression وتعني التعابير النمطية، وهي طريقة للبحث عن نصوص معينة ومطابقتها في مستند بإستخدام نمط Pattern، فعلى سبيل المثال إن أردت حذف كل المسافات في مستند ما، فعليك أن تقوم بذلك يدويًا أو تقوم ببرمجة سكريبت كبير للبحث عن المسافات بكل أنواعها، لكن هذا الأمر سوف يستغرق منك الكثير من الجهد والوقت وقد لا تنجح في النهاية في هذه المهمة، بينما يمكنك أن تستعمل التعابير النمطية Regex لتسهيل هذه المهمة، وكل ما عليك هو كتابة مجموعة من الرموز كالتالي على سبيل المثال: /^\s+|\s+$|\s+(?=\s)/g قد تبدو الرموز السابقة عشوائية وغير واضحة على الإطلاق، ولكن لكل رمز من الرموز السابقة معنى يعبر عنه، وسأشرح هذه الرموز بطريقة بسيطة. يسمى الرمز السابق بالنمط Pattern، أي أنك تقوم بالبحث عن نمط معين في نص ما وسوف تحثل في النهاية على كل الكلمات المطابقة للنمط الذي حددته. ملاحظة: يُمكن إستخدام موقع regex101 لتجربة كل الأمثلة التالية وتجربتها. النمط Pattern يتكون النمط من علامتي القسمة Slash / / ويكتب بينهما كل الرموز المستخدمه في عملية البحث، وقد يأتي بعدهما حرف مثل حرف g في المثال السابق، ويسمى هذا الحرف بـ "علم التعبير Expression Flag" وسوف نتطرق إليه لاحقًا. إذا قُمتَ بإضافة أي كلمة بين هذه العلامات سوف يتم تحديدها، فعلى سبيل المثال إن أردت البحث عن كلمة "hello" في نص ما، يمكنك أن تقوم بالبحث عنها بهذه الطريقة: /hello/g وستكون النتيجة كالتالي: لاحظ كيف تم تحديد كل كلمات hello، ولكن لماذا لم يتم تحديد كلمة Hello الأخيرة؟ لذلك لأن كلمة hello تختلف عن Hello فالتعابير النمطية regex حساسة لحالة الأحرف، ولكن لحسن الحظ تسمح التعابير النمطية Regex بتحديد كل أشكال الكلمة وبأكثر من طريقة، كالتالي: يُمكن أن نستخدم علامة pipe ( | ) وهي تستخدم للتعبير عن حرف من حرفين، فعلى سبيل المثال إن إستخدمنا التعبير النمطي التالي: /[h|H]ello/g سوف يتم تحديد كلمة hello و Hello معًا، ذلك لأن علامة | تستخدم وكأننا نقوم حرف h أو H ثم باقي الكلمة ello، وستكون النتيجة كالتالي: الآن تم تحديد كل كلمات hello. لاحظ أيضًا إستخدام القوسين [ ] في المثال السابق وذلك لتحديد حرف واحد فقط من كلا الحرفين (H و h)، بينما إذا لم نستخدم الأقواس سوف يتم تحديد الحرف h وكلمة Hello فقط ، وكأننا نقوم أبحث عن الحرف h أو كلمة Hello : يمكن أيضًا إستخدام نقطة . للتعبير عن "أي حرف"، فعلى سبيل المثال يمكن تحديد كلمة hello و Hello من خلال التعبير التالي: /.ello/g التعبير النمطي السابق سوف يقوم بتحديد أي نص يحتوي على كلمة ello ويبدأ بأي حرف حتى وإن لم يكن حرف h ، فمثلًا سوف يتم تحديد كلمات مثل gello و sello أو أي كلمة تبدأ بأي حرف وبعده ello تحديد الكلمات الإنجليزية يُمكن إستخدام رموز خاصة في التعابير النمطية لأداء مهمة معينة، فعلى سبيل المثال يُمكن تحديد كل الحروف أو الأرقام على حدى من خلال \w، كالتالي: كما يمكن تحديد كل الكلمات من خلال إضافة علامة + إلى التعبير النمطي السابق: علامة + تعني تكرار الرمز السابق لها (وهو \w في هذه الحالة) بأي عدد من المرات، وبالتالي سيتم تحديد أي مجموعة من الحروف معًا أو بمعنى آخر الكلمات فقط (حتى وإن إن كانت تحتوي الكلمات على أرقام). يُمكننا تحديد كذلك الكلمات التي لا تحتوي على أرقام بل حروف فقط من خلال إستخدام الرمز [a-z] وسوف يقوم بتحديد كل الحروف الإنجليزية لاحظ في المثال الأول تم تحديد كل الحروف الإنجليزية الصغيرة Small Letters بينما في المثال الثاني تم تحديد كل الحروف الإنجليزية الكبيرة والصغيرة. إستخدام التعابير النمطية RegEx مع النصوص العربية نستطيع أيضًا إستخدام التعابير النمطية مع الكلمات العربية: قد تتسأل لماذا لم يتم تحديد كل كلمات "مرحبًا"، وذلك لأن في اللغة العربية (وغيرها من اللغات) تحتوي على تشكيل للحروف، ويعتبر كل تشكيل حرف منفصل، فحركة الضمة حرف، والكسرة حرف والشدة حرف .. إلخ، فكلمة "مرحبا" تختلف عن "مَرْحَبًا"، وبالتالي لن نتمكن من تحديد الكلمات التي لها تشكيل مختلف بسهولة، لذلك يتم إستعمال رموز unicode لحل هذه المشكلة في كثير من الأحيان كما سنرى لاحقًا. تحديد الكلمات العربية قمنا سابقًا بتحديد الكلمات الإنجليزية بالكامل من خلال الرمز [a-z] ونستطيع تطبيق نفس الفكرة من على الكلمات العربية من خلال الرمز [ء-ي] حيث تبدأ الحروف العربية بالهمزة وتنتهي بالياء يُمكن إستخدام رموز unicode كما أشرت سابقًا بدلًا من الحروف العربية. تُكتب رموز Unicode بالشكل التالي u0627\ \u0627 حرف الألف ا \u0628 حرف الباء ب مع العلم أن كل الحروف والرموز العربية بما فيها رموز التشكيل والحركات تنحصر بين u0600\ و u06FF\ بشكل عام، وكل الأحرف تنحصر بين u0621\ و u0650\ ، كما تنحصر رموز التشكيل ما بين u064B\ و u0652\ ملاحظة: بعض البرامج ولغات البرمجة لا تدعم الشكل السابق ولكن يتم تتغيره إلى الصيغة x{0627}\ كالتالي: تحديد كلمة عربية بغض النظر عن تشكيلها نستطيع الآن تحديد أي كلمة عربية من خلال إستخدام رموز Unicode بغض النظر عن تشكيلها أو حركات الحروف بها. في المثال التالي يتم تحديد كل كلمات "من" بكل أشكالها: لاحظ كيف تم التعويض عن تشكيل كل حرف بإستخدام رموز Unicode إستخدام التعابير النمطية RegEx في لغات البرمجة توفر كل لغات البرمجة طريقة للتعامل مع التعابير النمطية RegEx، فعلى سبيل المثال توفر لغة Python مكتبة re للتعامل مع التعابير النمطية، كما توفر لغة JavaScript الكائن RegExp كما توفر التعامل مع النصوص بإستخدام التعابير النمطية بصورة مباشرة. var str = 'fee fi fo fum'; var myArray = str.match(/\w+\s/g); console.log(myArray); // ["fee ", "fi ", "fo "] إستخدام التعابير النمطية في محررات النصوص توفر برامج تحرير النصوص والأكواد مثل VS Code و Sublime Text و Notepad++ طرقًا للتعامل مع التعابير النمطية والبحث في المستندات وتبديل القيم بنصوص أخرى، وذلك من خلال البحث Ctrl + f أو البحث والإستبدال Ctrl + h مصادر إضافية كما توفر موسوعة حسوب شرح كامل لمكتبة re في بايثون يمكنك الإطلاع عليه من هنا، وكذلك شرح للكائن RegExp في لغة JavaScript. 1 اقتباس
0 هشام رزق الله نشر 14 أكتوبر 2015 أرسل تقرير نشر 14 أكتوبر 2015 Regex هي اختصار لـ Regular expression وتسمى باللغة العربية تعابير عادية أو تعابير نمطية، وهي تسلسل من الحروف التي تُعرف نمط للبحث، وهذه التعابير تستخدم بشكل أساسي في عمليات البحث و المطابقة بين السلاسل النصية مثل العمليات من نوع "أبحث ثم استبدل".ولدى هذه التعابير رموز خاصة بها مثل ^ الذي يرمز لبداية الصفحة و $ الذي يرمز لنهايتها.المصدر اقتباس
السؤال
Mustafa AlSulTani
السلام عليكم
نصبت إحدى إضافات الووردبريس الاجنبية ووجدت كلمة RegEx بأحد الخيارات ولم أجد مُحتوى عربي يشرح الكلمة او إلامَ تُشير؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.