كيفية استخدام التعبيرات العادية الأساسية للبحث أفضل وتوفير الوقت
سواء كنت تبحث مع Grep أو تبحث في البرامج التي يمكنها أن تعيد تسمية الملفات نيابة عنك ، ربما تساءلت عما إذا كان هناك طريقة أسهل لإنجاز مهمتك. لحسن الحظ ، هناك ، وتسمى "التعبيرات العادية".
(هزلي من XKCD.com)
ما هي التعبيرات العادية?
تعتبر التعبيرات العادية عبارة عن عبارات منسقة بطريقة محددة للغاية ويمكن أن تمثل العديد من النتائج المختلفة. تُعرف أيضًا باسم "regex" أو "regexp" ، ويتم استخدامها بشكل أساسي في وظائف البحث وتسمية الملفات. يمكن استخدام تعبير واحد مثل صيغة لإنشاء عدد من المخرجات المحتملة المختلفة ، والتي يتم البحث عنها جميعها. بدلاً من ذلك ، يمكنك تحديد كيفية تسمية مجموعة من الملفات عن طريق تحديد regex ، ويمكن للبرنامج أن ينتقل بشكل متزايد إلى الإخراج التالي المقصود. بهذه الطريقة ، يمكنك إعادة تسمية ملفات متعددة في مجلدات متعددة بسهولة وكفاءة ، ويمكنك تجاوز حدود نظام الترقيم البسيط.
نظرًا لأن استخدام التعبيرات العادية يعتمد على بنية خاصة ، يجب أن يكون برنامجك قادرًا على القراءة وتحليلها. العديد من برامج إعادة تسمية الملفات الدفعية لنظامي التشغيل Windows و OS X لديهم دعم لـ regexps ، بالإضافة إلى أداة البحث عبر النظام الأساسي GREP (التي تطرقنا إليها في Bash Scripting for Beginners Guide) وأداة سطر الأوامر Awk لـ * Nix. بالإضافة إلى ذلك ، فإن العديد من مديري الملفات البديلة ، وأجهزة الإطلاق ، وأدوات البحث يستخدمونها ، ولديهم مكان مهم جدًا في لغات البرمجة مثل Perl و Ruby. توفر بيئات التطوير الأخرى مثل .NET و Java و Python بالإضافة إلى C ++ 11 القادم مكتبات قياسية لاستخدام التعبيرات العادية. كما يمكنك أن تتخيل ، يمكن أن تكون مفيدة جدًا عند محاولة تقليل مقدار الشفرة التي تضعها في أحد البرامج.
ملاحظة حول الهروب من الشخصيات
قبل أن نعرض عليك أمثلة ، نود أن نشير إلى شيء ما. سنستخدم أمر bash shell وأمر grep لإظهار كيفية تطبيق التعبيرات العادية. تكمن المشكلة في أننا أحيانًا نرغب في استخدام أحرف خاصة يجب تمريرها إلى grep ، وستقوم shell bash بتفسير ذلك الحرف لأن shell تستخدمه أيضًا. في هذه الظروف ، نحتاج إلى "الهروب" من هذه الشخصيات. هذا يمكن أن يكون مربكًا لأن هذا "الهروب" من الأحرف يحدث أيضًا داخل regexps. على سبيل المثال ، إذا أردنا إدخال هذا في grep:
\<
سيكون علينا استبدال ذلك بـ:
\\\<
كل حرف خاص هنا يحصل على خط مائل واحد. بدلاً من ذلك ، يمكنك أيضًا استخدام علامات الاقتباس الفردية:
'\<'
يقتبس المقتطف الواحد bash not لتفسير ما بداخلهما. في حين أننا نطلب اتخاذ هذه الخطوات حتى نتمكن من إثباتها لك ، فغالبًا لن تتطلب برامجك (لا سيما البرامج القائمة على واجهة المستخدم الرسومية) هذه الخطوات الإضافية. للحفاظ على الأشياء بسيطة ومباشرة ، سيتم إعطاء التعبير العادي الفعلي لك كنص مقتبس ، وسترى التركيب الهروب في لقطات الشاشة في سطر الأوامر.
كيف يتم توسيع?
تعتبر Regexps طريقة موجزة بالفعل لتوضيح المصطلحات بحيث يمكن للكمبيوتر الخاص بك توسيعها إلى خيارات متعددة. دعونا نلقي نظرة على المثال التالي:
توم [0123456789]
الأقواس المربعة - [و] - تخبر محرك التحليل بأن كل ما بداخله ، يمكن استخدام أي حرف ONE لمطابقته. ما يسمى داخل تلك الأقواس يسمى مجموعة الأحرف.
لذلك ، إذا كانت لدينا قائمة كبيرة من الإدخالات واستخدمنا هذا التعبير المعتاد للبحث ، فستتم مطابقة البنود التالية:
- توم
- tom0
- tom1
- tom2
- tom3
وما إلى ذلك وهلم جرا. ومع ذلك ، لن تتم مطابقة القائمة التالية ، وبالتالي لن تظهر في نتائجك:
- طماطم ؛ لا يحسب التعبير المعتاد أي أحرف بعد كلمة "tom"
- توم يكون التعبير المعتاد حساسًا لحالة الأحرف!
يمكنك أيضًا اختيار البحث باستخدام نقطة (.) والتي ستسمح بأي حرف موجود ، طالما أن هناك حرفًا موجودًا.
كما ترون ، مع grepping
.توم
لم يأتِ بشروط لم يكن لها سوى "توم" في البداية. حتى "الطماطم الخضراء" دخلت ، لأن الفضاء قبل "توم" يعد شخصية ، لكن مصطلحات مثل "tomF" لم يكن لها طابع في البداية ، وبالتالي تم تجاهلها.
ملاحظة: السلوك الافتراضي لـ Grep هو إرجاع سطر كامل من النص عندما يتطابق جزء ما مع تعبيرك المنطقي. قد لا تفعل ذلك برامج أخرى ، ويمكنك إيقاف هذا في grep مع العلم "-o".
يمكنك أيضًا تحديد التناوب باستخدام أنبوب (|) ، مثل هنا:
SPECIALI (ق | ض) ه
هذا سوف يجد كلا:
- متخصصون
- متخصصون
عند استخدام الأمر grep ، نحتاج إلى الهروب من الأحرف الخاصة (، | ، و) مع الخطوط المائلة العكسية بالإضافة إلى استخدام علامة "-E" للحصول على هذا العمل وتجنب الأخطاء القبيحة.
كما ذكرنا أعلاه ، هذا لأننا نحتاج إلى إخبار bash shell بتمرير هذه الأحرف إلى grep وعدم القيام بأي شيء معهم. تخبر العلامة "-E" grep باستخدام الأقواس والأنابيب كأحرف خاصة.
يمكنك البحث عن طريق الاستبعاد باستخدام علامة إقحام داخل أقواسك المربعة وفي بداية المجموعة:
توم [^ F | 0-9]
مرة أخرى ، إذا كنت تستخدم grep و bash ، تذكر أن تفلت من هذا الأنبوب!
المصطلحات التي كانت في القائمة ولكنها لم تظهر:
- tom0
- tom5
- tom9
- tomF
هذه لم تتطابق مع تعبيرنا المعتاد.
كيف يمكنني استخدام البيئات?
في كثير من الأحيان ، نقوم بالبحث على أساس الحدود. أحيانًا لا نريد سوى سلاسل تظهر في بداية الكلمة ، أو في نهاية الكلمة ، أو في نهاية سطر من التعليمات البرمجية. ويمكن القيام بذلك بسهولة باستخدام ما نسميه المراسي.
يسمح لك استخدام علامة الإقحام (الموجودة خارج الأقواس) بتعيين "بداية" السطر.
^ توم
للبحث عن نهاية السطر ، استخدم علامة الدولار.
توم $
يمكنك أن ترى أن سلسلة البحث الخاصة بنا تأتي قبل المرساة في هذه الحالة.
يمكنك أيضًا التطابقات التي تظهر في بداية الكلمات أو نهايتها ، وليس في الأسطر الكاملة.
\
توم \>
كما ذكرنا في المذكرة في بداية هذه المقالة ، نحن بحاجة إلى الهروب من هذه الشخصيات الخاصة لأننا نستخدم باش. بدلاً من ذلك ، يمكنك أيضًا استخدام علامات الاقتباس الفردية:
النتائج هي نفسها. تأكد من استخدام علامات الاقتباس الفردية ، وليس علامات الاقتباس المزدوجة.
موارد أخرى للحصول على Advanced Regexps
لقد وصلنا فقط إلى قمة جبل الجليد هنا. يمكنك أيضًا البحث عن مصطلحات مالية محددة بواسطة علامة العملة ، والبحث عن أي من ثلاثة أو أكثر من مصطلحات المطابقة. يمكن أن تصبح الأمور معقدة حقًا. إذا كنت مهتمًا بمعرفة المزيد عن التعبيرات العادية ، فالرجاء إلقاء نظرة على المصادر التالية.
- يحتوي موقع Zytrax.com على بضع صفحات تحتوي على أمثلة محددة توضح أسباب حدوثها وعدم تطابقها.
- لدى Regular –Expressions.info أيضًا دليل قاتل للكثير من العناصر الأكثر تقدمًا ، بالإضافة إلى صفحة مرجعية مفيدة.
- يحتوي Gnu.org على صفحة مخصصة لاستخدام regexps مع grep.
يمكنك أيضًا إنشاء التعبيرات العادية واختبارها باستخدام أداة مجانية تستند إلى Flash ومعروفة باسم RegExr. يعمل أثناء الكتابة ، وهو مجاني ، ويمكن استخدامه في معظم المتصفحات.
هل لديك استخدام مفضل للتعبيرات العادية؟ تعرف على renamer دفعة كبيرة التي تستخدمها؟ ربما تريد فقط التباهي حول grep فو الخاص بك. ساهم في أفكارك عن طريق التعليق!