آموزش کامل Regular Expressions عبارات باقاعده

علی حسین شهابی

1395/8/24

نظر0

با سلام خدمت دوستان عزیز

امروز می خوام درباره عبارت های با قاعده یا Regular Expressions صحبت کنم.

Regular Expressions یا عبارات باقاعده که به اختصار RegEx نامیده می شود ، توسط اکثر زبان های برنامه نویسی پشتیبانی می شود .
به طور ساده ، RegEx رشته هایی هستند که برای انجام عملیات تطابق و جایگذاری عبارات در رشته استفاده می شوند . عبارات باقاعده با استفاده از زبان Regular Expressions ایجاد می شوند . همانند هر زبان دیگر ، زبان Regular Expressions نیز syntax ، نمادها و دستورات مخصوص به خود را دارد . این زبان را یک زیرمجموعه از زبان های برنامه نویسی در نظر بگیرید .
استفاده از RegEx
ما از RegEx برای دو منظور استفاده می کنیم :
۱- جستجوی عبارات در متن
۲- جستجو و جایگزاری عبارت در متن
برای استفاده از RegEx به چند نکته توجه کنید :
برخی از نمادها ، دستورات RegEx مختص یک یا چند زبان برنامه نویسی خاص هستند و در زبان دیگر کاربردی ندارند .
برنامه هایی برای تست عبارات با قاعده (Regular Expressions) وجود دارند که از آنها می توان برای بررسی صحت و عملکرد عبارات با قاعده استفاده کرد .
یکی از ابزارها که به صورت رایگان عرضه می شود ، Expresso است که می توانید برای دانلود آن به سایت http://ultrapico.com مراجعه کنید .
قبل از شروع یادگیری به دو نکته توجه کنید :
برای حل یک مساله ممکن است چندین عبارت با قاعده ی مختلف نوشت . برخی از این عبارات ممکن است سریع تر و دستور برخی ممکن است آسان تر باشد که با کسب تجارب به تدریج RegEx های بهتری خواهید نوشت .
رمز یادگیری یک زبان ، فقط تمرین است و به دلیل اینکه ممکنه کمتر استفاده کنید امکان فراموشی Regular Expressionsبسیار زیاد می باشد .

من به شخصه برای نوشتن Regular Expressions های مورد نیازم آنها را در سایت های http://regexr.com یا https://regex101.com می نویسم و تست می کنم.

خب حالا به سراغ قواعد Regular Expressions میریم  :

 

. دات (Dot)

کاراکتر پرکاربردی که در عبارات با قاعده (Regular Expressions) کاربرد دارد، نقطه یا dot است که به معنی هر کاراکتری (به جزء خط جدید)

/./

این regex باعث انتخاب تک تک کاراکترهای عبارت مورد نظر می شود .

این regex تمام کاراکترها را انتخا می کندحتی کاراکتر خط جدید یا line breaks .

 

s کوچیک (whitespace )

/[\s]/

این regex باعث انتخاب تک تک فضاهای خالی و space های درون متن می شود.

 

S بزرگ (Not whitespace )

/[\S]/

w کوچیک (word )

این regex بر خلاف قبلی , باعث انتخاب تک تک  کاراکترها به جز فضاهای خالی می شود.

/[\w]/

این regex  باعث انتخاب تک تک  کاراکترهای A-Z و a-z و 0-9 و _  ب می شود.

 

W بزرگ ( not  word )

/[\W]/

این regex بر خلاف قبلی می باشد و باعث انتخاب تک تک کاراکترهای به جز A-Z و a-z و 0-9 و _ می شود.(یعنی [A-Za-z0-9_^])

مثلا شامل موارد زیر می باشد و آنها را در متن سلکت می کند :

+-.,!@#$%^&*();\/|<>”‘:/

 

d کوچیک (digit )

\d\

اعداد 0تا 9 را در متن انتخاب می کند . دقیقا با [0-9] برابر می باشد .

 

D بزرگ  (Not Digit)

هر کاراکتری که عدد نباشد را انتخاب می کند و دقیقا همانند [^0-9] می باشد

\D\

[] character Set

\[abc]\

مثلا [abc] تمام کاراکتر های a و b و c را در متن انتخاب می نماید حتی اگر پشت سر هم نباشند .

negated set

	
\[^abc]\

[abc^] بر خلاف بالایی تمام کاراکترها را انتخاب می نماید به جز کاراکترهای a و b و c  در واقع علامت  ^ وقتی داخل [] بیاد به معنی Not می باشد .

range

\[0-5]\

ما می توانیم رنج خاصی از اعداد یا حروف را در متن انتخاب نماییم مثلا [5-0] تمام اعداد 0 تا 5 را در متن انتخاب می نماید .

یا [g-s] تمام حروف بین g تا s را انتخاب می نماید.

 

b کوچک (word boundary)

کلمه  boundary به معنای مرز می باشد پس در نتیجه اشاره به آخرین کاراکتر کلمات می کند که مرزی بین کلمه ی فعلی و کلمه ی بعدی می باشد .

[o]\b

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

 

b بزرگ (Not word boundary )

[o]\B

دقیقا بر خلاف بالایی است یعنی تمام حروف o را انتخاب می نماید به شرطی که در مرز کلمات نباشد و در اول یا وسط کلمه باشد .

 

tab

\t\

فاصله هایی که به واسطه زدن دکمه Tab در متن ایجاد شده است را انتخاب می نماید .

 

علامت +

این علامت در regular expressions به معنای 1 یا بیشتر است .برای بیان تعداد است .

b\w+

عبارت باقاعده ی بالا تمام حرف b که بعدش 1 یا بیشتر کاراکتر آمده باشد را انتخاب می کند.

 

علامت * 

این علامت در regular expressions به معنای 0 یا بیشتر است .(برای بیان تعداد است )

 

optional ؟

علامت ؟ به معنی اختیاری بودن می باشد .به مثال زیر توجه کنید :

123?4

در این مثلا گفتیم عدد 3 اختیاری است  پس این عبارت با قاعده تمام عددهای 124 و 1234 را انتخاب میکند.

| یا

در عبارات باقاعده علامت | به معنای “یا ” می باشد .

به این مثال دقت کنید :

b(a|e|i)d

این مثال میگه ما دنبال عباراتی هستیم که حرف اوشون b و حرف دمشون یکی از حروف a یا e یا i باشد و حرف سوم آها هم d باشد .

 

Character classes

همانطور که می دانید در عبارات با قاعده یا regular expressions برخی کاراکتر ها معنی خاصی می دهند و اگر بخواهیم از خود آن کاراکترها استفاده کنیم باید به اصطلاح escaped نماییم و این کار با قرار دادن یک \ (بک اسلش) قرار دهیم .

این کاراکترها را در ادامه بررسی می می کنیم :

.\

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

\\

/\\/

تمام کاراکترهای بک اسلش را در متن انتخاب می نماید .

+\

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

و برای بقیه کاراکترهای خاص هم به همین صورت می باشد و قبل از آن یک بک اسلش قرار می دهیم :

  • ?\
  • *\
  • ^\
  • &\
  • [\
  • ]\
  • {\
  • }\
  • )\
  • (\

Flags

در عبارات با قاعده مبحثی به نام flag ها هست  که کارهای عمومی را انجام می دهند :

  • g : باعث می شود انتخاب های ما به صورت global باشد و سراسر متن را جستجو کند .
  •  i : حالت حساس بودن به حروف کوچک و بزرگ را غیر فعال می کند .
  • m : حالت Multi line را فعال می کند .در این  حالت وقتی مثلا از ^ استفاده کنید به جای اینکه فقط اول متن را انتخاب کند اوله هر خط را نیز انتخاب می کند .

 

 

 

 

 

اینستاگرام علی حسین شهابی لینکدین علی حسین شهابی

1 نظر

( 1395/12/5 )mohammad rahmani

خلاصه و عالی ... ممنون از سایت خوبتون .. موفق باشید

ارسال نظر جدید

 
Not signed in

کلیه حقوق مادی و معنوی , متعلق به سایت (Alihossein.ir)می باشد ,انتشار مطالب بدون ذکر منبع از نظر اخلاقی و شرعی صحیح نمی باشد.