الحماية للأبد -Security 4 Ever

الحماية للأبد -Security 4 Ever (https://www.sec4ever.com/home/index.php)
-   دورة البيرل Perl (https://www.sec4ever.com/home/forumdisplay.php?f=177)
-   -   [شرح كتابى] الدرس السادس: مدخل للتعابير القياسية (https://www.sec4ever.com/home/showthread.php?t=15099)

b0y 28-06-2014 10:27 PM

الدرس السادس: مدخل للتعابير القياسية
 
2 مرفق


السلام عليكم و رحمة الله و بركاته


التعابير القياسية (regular expression أو إختصارا regex) هي مادة ليست حكر على البيرل وحده, فالعديد من اللغات و الأدوات (كالsed,awk) تستعمله.


في البيرل الطريقة البدائية لتطبيق الregex هي عبر =~ أو !~. فالأولى هي للتطابق, كأننا نفحص وجود شيء أما الثانية فالعكس.

يوجد لدينا 3 operator رئيسية في التعابيرل القياسية في البيرل:
  • Match Regular Expression - m//
  • Substitute Regular Expression - s///
  • Transliterate Regular Expression - tr///
طبعا ال / في هذه الoperator بالإمكان تغييره لأي delimiter آخر, ال# كمثال.

نبدأ مع ال Match Operator

هذا الoperator إسم على مسمى, فهو يستعمل لعملية الMatching لكلمة أو حرف أو جملة. مثلا نحن لدينا جملة:

“sec4ever to learn”

نحن نريد أن نفحص وجود الكلمة "sec" بالكود التالي:
كود:

$test = "sec4ever to learn";
 
if ($test =~ /sec/){
 
print "Match";
 
}else{
 
print "No Match";
 
}

عند تشغيله: سيطبع “Match”. فكما رأينا عند وجود الكلمة الناتج يأتي true و لذلك طبع Match.

كما ذكرنا سابقا فيمكننا تغيير الdelimiter فالمثال السابق بالإمكان كتابته ك:

1-
كود:

$test = "sec4ever to learn";
 
if ($test =~ m[sec]){
 
print "Match";
 
}else{
 
print "No Match";

}

2-
كود:

$test = "sec4ever to learn";
 
if ($test =~ m#sec#){
 
print "Match";
 
}else{
 
print "No Match";

}



3-
كود:

$test = "sec4ever to learn";
 
if ($test =~ m<sec>){
 
print "Match";
 
}else{
 
print "No Match";
 
}

جميع النتائج هي نفسها: “Match”. كما رأينا علينا إسمال الوثم m مع أي delimiter إلا ال// فهو معرف بm وحده أي إن // هي نفس m//.

طبعا لدينا modifiers غير الm:


http://im61.gulfup.com/343M7N.png


بالنسبة للregex فلدينا العديد من الsyntax لكن قبل شرحهم, لدينا بعض الspecial variable خاص بالregex ف

$& هي للتطابق نفسه.

$` كل ما قبل التطابق.

$' كل ما بعد التطابق.

مثال:


http://im61.gulfup.com/TUro7D.png


الآن نرجع لصيغ التعابير القياسية:


http://im61.gulfup.com/d3xB4q.png
http://im61.gulfup.com/YiiMBw.png

ال Substitution Operator:

هذا الoperator معرف ب:s/// طبعا ال/ بالإمكان تغييره لأي delimiter

و ظيفته من إسمه هي الإستبدال

مثلا لدينا الجملة:

“I’m learning perl”

و أريد تغيير perl لphp بأستعمل الكود التالي:


http://im61.gulfup.com/cokIxr.png


ال Modifiers الخاصة بهذا المود هي نفسها للمود السابق.

ال Translation Operator

هي نفس ال Substitution operatorتقريبا, لكن الtranslation لا تستعمل التعابير القياسية.

الsyntax هي: tr/// و أيضا يمكننا تغيير الdelimiter.

مثال:

لدي الجملة:

“perl on sec4ever”

و أريد تغيير كل الأحرفe لo فالكود:


http://im61.gulfup.com/EUWW1A.png


بدون الحرف الواحد يمكننا إستخدام range مثلا لتحويل جميع الأحرف من أحرف صغيرة لكبيرة يمكننا إستعمال:

tr/[a-z]/[A-Z]/ و هي نفس الuc function.

أو الlc function هي: tr/[A-Z]/[a-z]/

الآن نرجع للmatching operator

في عملية الmatching فالنتيجة تحفظ بشكل default بالمتغييرات $1 $2 ….

لكن يمكننا حفظها في متغييرات مثال:


http://im61.gulfup.com/Mw3Ec4.png

الشرح هو مدخل لل
regex فالregex أكبر بكثير و معقد أكثر من الصيغ السابقة. لكن أتمنى أن يكون الشرح مفهوم لمن أراد التعمق أكثر فيوجد العديد من المراجع المفيدة.

التطبيق هو:

لدينا ملف /usr/local/cpanel/logs/error_log في السيبنل و هو يحتوي على باسووردات دخول خاطئة أو صحيحة في بعض الأحيان. صيغة السطر المطوب:

'user', 'blabla', 'pass', 'blablapass',

المطلوب هو إستخراج blablapass و وضعهم في الملف pass.txt.

تطبيقي على الملف المرفق:


http://im61.gulfup.com/qt5hmi.png


بتطبيقي فتح الملف و قارنته سطر سطر على الregex و في حال التطابق يطبع الباس في ملفpass.txt.

هذا الأول أما الثاني فهو نفس الأول لكن يجب طبعات الpass مع uppercase و lowercase و الباس.

تطبيقي:


http://im61.gulfup.com/jnSi5n.png


بالمناسبة يمكن إسعمال (.*?) لتطابق أي شيء إلا ال/s.


بالتوفيق و في أمان الله


الساعة الآن 09:08 PM

Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.