Loading...

BTC Address to donate : [[address]]

Donation of [[value]] BTC Received. Thank You.
[[error]]

b0y مراقب
  • شكراً: 3113
  • تم شكره 2558 مرة في 509 مشاركة



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


التعابير القياسية (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:




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

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

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

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

مثال:




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





ال Substitution Operator:

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

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

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

“I’m learning perl”

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




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

ال Translation Operator

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

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

مثال:

لدي الجملة:

“perl on sec4ever”

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




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

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

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

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

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

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



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

التطبيق هو:

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

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

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

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




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

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

تطبيقي:




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


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

توقيع


المشاركة الأصلية كتبت بواسطة ApOcalYpse اقتباس :
فقط توقف عن طلب النتيجة و تخيلها و السعي خلفها و قم بما عليك القيام به
...
الناس تحب النتيجة و لكنها تكره الطريق الصعب الذي يوصل اليها
المشاركة الأصلية كتبت بواسطة Sec4ever اقتباس :
فيه حكمة مهمة جدا ينقصنا نحن المسلمون العمل بها حتى تكون لنا مكانة بين الأخرين :

يجب العمل قدر المستطاع و ليس قدر الحاجة .
المشاركة الأصلية كتبت بواسطة UzunDz اقتباس :
ثانيا فيه ادمغة من العرب وموجودين معنا هنا بالمنتدى ويقدمو مواضيع ما تجدها عند الأجانب والتقليل من شان العرب امام الأجانب يسمى جهل و نقص في الشخصية ونوعية هذا الكلام لا تفيدنا الا في الرجوع الى الوراء,, وان كنت شايف نفسك متوقف في كيفية صنع ليتر فهذا لا يعني ان الجميع متوقف هناك بمعنى آخر لا تتكلم بصيغة الجمع عن العرب لأنك تمثل نفسك فقط
المشاركة الأصلية كتبت بواسطة chevr0sky اقتباس :
أنصحك بالتشمير عن سواعدك و الكد و التعب و كذلك سهر الليالي فلا توجد خلطة أو وصفة توصلك إلى مبتغاك.

10 أعضاء قالوا شكراً لـ b0y على المشاركة المفيدة: