• ورود
  • هیچ محصولی در سبد خرید نیست.

Regex چیست؟(آموزش مقدماتی)

آشنایی با Regex و نوشتن Regex برای پیدا کردن شماره های تلفن همراه.

Regex (Regular Expression) یک رشته (string) از کاراکترهاست که این کاراکترها یک الگو جستوجو در متن را تولید میکند!

بیایید با یک مثال بهتر این موضوع را بازگو کنیم.

فرض کنید یک فایل متنی عظیم دارید که در آن اطلاعات کاربران وجود دارد اما شما فقط شماره تلفن کاربران را میخواهید و نیازی به سایر اطلاعات ندارید و میخواهید برای استخراج این شماره ها برنامه ای بنویسید.

اینجاست که Regex به کمک ما می‌آید؛ ما با Regex یک الگو طراحی میکنیم که شماره های کاربران را استخراج کند.

درصورت تمایل میتوانید تمام این اطلاعات استخراج شده را در فایل دیگری ذخیره کنید.

Regex ها در زمینه های مختلف مورد استفاده قرار میگیرند که ما فقط به یکی از آنها اشاره کردیم. (استخراج اطلاعات)

مزایا

صرفه جویی در زمان

سادگی نحو(syntax)

یک خط Regex خیلی بهتر از چندین خط کد برای جستوجوی اطلاعات است زیرا از if,for,while و… فاکتور بگیرد.

یکی از سریع ترین متد های ممکن برای جستوجو.

معایب

سختی در خواندن و متوجه شدن به طوریکه هنگام استفاده باید یک دیکشنری یا راهنما در کنار خود داشته باشید.

تنها برای متن است.

شما قادر به توسعه دادن آن نیستید.

شروع کار با Regex

خب بیایید یک Regex برای مثال بالا طراحی کنیم در ابتدا من رجکس مربوطه را درج میکنم و بعدش با هم خواهیم فهمید معنای این رجکس چیست!

(۹۸[۰-۹]{۱۰})

این یک رجکس ساده است شاید الان ترسناک به نظر برسد و یا گنگ باشد اما باور کنید من بدتر از اینهاهم دیده ام به همین دلیل است که بهتر است دیکشنری رجکس را کامل فرا بگیریم.

حال بیایید با مفهوم کاراکترها در رجکس آشنا شویم.

هنگامی که شما دنبال رشته ای که یک کلمه خاص در آن است می‌گردید تنها کافی است خود کلمه را تایپ کنید برای مثال

Pythoniha

وقتی که دنبال رشته ای میگردید که با یک کلمه خاص شروع شده باشد باید از علامت ” ^ ” استفاده کنید برای مثال

^Start

وقتی دنبال رشته ای میگردید که یک کلمه خاص در پایان آن باشد از علامت ” $ ” استفاده کنید برای مثال

end$

حال شما میتوانید از ترکیب بالا استفاده کنید به این صورت

^Start end$

و در نتیجه رشته ای برگردانده میشود که با Start شروع شده و با end به پایان رسیده باشد.

نحوه توضیح دادن را سریع تر میکنم که مطلب حوصله سر بر نباشد رجکس آسان نیست اما شیرین است.

لازم میبینم که یک cheat sheet را در ادامه مطلب درج کنم شما میتوانید در صورت تمایل آن را ذخیره کنید و بعدا استفاده کنید.

کمی پیچیده تر

دات ” . ” یعنی هر کاراکتری

ستاره ” * ” یعنی حرفی صفر بار یا بیشتر تکرار شده باشد

پایپ ” | ” به معنای یا میباشد.

علامت سوال ” ؟ ” به معنای اختیاری است.

حال با یک مثال کاراکتر های بالا رو توضیح میدهیم.

.

abc*

a(b|c|d)

123?4

به ترتیب ۱. تمامی رشته ها را بر میگرداند.

۲. رشته های که ab و بعد c صفر بار یا بیشتر تکرار شده باشد را برمیگرداند.

۳. رشته های که در ابتدا a سپس b یا c یا d باشد را برمیگرداند.

۴. رشته های که که در آنها ۱۲ در ابتدا و سپس ۳ صفر یا یکبارتکرار شده باشد و در انتها ۴ قرار داشته باشد را برمیگرداند.

علامت بعدی براکت ” [] ” است

برای مثال [abcdefg] یعنی حروف a و b و c. برگردانده میشوند حتی اگر پشت سر هم نباشند.

یک مثال دیگر: [a-g] معادل مثال قبل است.

علامت بعدی آکولاد ” {} ” است به مثال زیر دقت کنید.

Mz{4}

Regex بالا یعنی رشته ای که با M شروع شده باشد و سپس دقیقا ۴ بار z تکرار شده باشد.

یک مثال دیگر:Mz{3,10}  

رجکس بالا رشته ای را پیدا میکند که با M شروع شده و سپس از ۳ تا ۱۰ بار حرف z تکرار شده باشد.

علامت پرانتز ” () ” یک گروه را تشکیل میدهد.

حال بیایید مفهوم اولین Regex نوشته شده در این مقاله را به زبان ساده بازگو کنیم.

Regex برای پیدا کردن شماره تلفن

(۹۸[۰-۹]{۱۰})

رشته ای که با ۹۸ شروع شده و سپس دقیقا ۱۰ بار یکی از اعداد ۰ تا ۹ در آن تکرار شده باشد؛ در انتها این رجکس را یک گروه میکنیم.

بهتر است که فعلا تا همینجا به خاطر بسپارید و منتظر قسمت بعدی Regex باشید. اگر متوجه نشدید اصلا نگران نباشید Regex کمی پیچیده است و در مقاله بعدی سعی میکنم از پیچیدگی این مطلب کاسته شود.

Regex Cheat Sheet
Cheat sheet

شاید علاقه داشته باشید:

الگوریتم دزدان دریایی google pirate چیست ؟

هوش مصنوعی چیست؟

اکر(DOCKER) چیست؟

شهریور ۲۵, ۱۳۹۹
0 0 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
ورژن 4 طراحی شده با ❤