آشنایی با عبارات منظم و استفاده از آنها در سوئیفت – بخش دوم

آشنایی با عبارات منظم و استفاده از آنها در سوئیفت – بخش دوم

در مطلب قبلی با مقدماتی از عبارت های منظم آشنا شدید، در این مقاله قصد داریم تا جزئیات بیشتری از این مبحث را ارائه دهیم، با ما همراه باشید.

مسائل مربوط به سینتکس

طبق محدودیت اعمال شده، رشته ها تنها متشکل از حروف کوچک از الفبا بودند، اما هم اکنون لازم است تا این محدودیت را برداشته و امکان استفاده از تمامی کاراکترهای اسکی را امکان پذیر گردانیم.

برای اینکه کار با عبارات منظم آسان و راحت باشد، باید خود آنها نیز به صورت رشته به نمایش در آیند، از این رو بر خلاف گذشته دیگر قادر به استفاده از کاراکترهایی مانند * | ( ) و غیره نمی باشیم و مشخص نیست که این رشته ها به عنوان کاراکترهای خاص مورد استفاده قرار می گیرند که نشان دهنده یک تناوب از رشته ها یا گروه بندی آنها هستند و یا کاراکترهای معمولی اند که باید دقیقا مطابقت داده شوند.

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

اختصار در نوشتن عبارت های منظم بسیار بااهمیت است و بسیاری از عبارت های منظم که قابل استفاده با نشانه گذاری بخش قبل هستند، بسیار طولانی می باشند. برای نمونه تصور کنید که می خواهید تمامی رشته های دو کاراکتری که از یک حرف کوچک و یک عدد پشت سر آن تشکیل شده اند را پیدا کنید. برای مثال رشته های a0، b9، z3 و غیره. استفاده از نشانه گذاری که قبلا مورد بحث قرار گرفت عبارت منظم زیر را نتیجه خواهد داد که حتی نوشتن آن نیز خسته کننده است:

(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z)(0|1|2|3|4|5|6|7|8|9)

عبارت [abcdefghijklmnopqrstuvwxyz][0123456789] گزینه بهتری نمی باشد؟ متاکاراکترهای ] و [ نمایش دهنده یک مجموعه از کاراکترها می باشد که یکی از آنها یک تطابق را نشان دهد. در حقیقت اگر این موضوع را مد نظر قرار دهیم که حروف a تا z و اعداد 0 تا 9 به ترتیب در مجموعه کاراکترهای اسکی ظاهر می شوند، می توان همان عبارت منظم قبلی را به صورت [ a – z ] [ 0 – 9 ] نیز نمایش داد.

در مجموعه کاراکترها، - یک متا کاراکتر دیگر است که یک محدوده را نشان می دهد، توجه داشته باشید که قادر به مختصر کردن چندین محدوده به همان جفت براکت ها می باشید. برای مثال [ 0 – 9a – zA-z ] با هر کاراکتر الفبایی و عددی مطابقت می کند. شاید این چیدمان حروف و اعداد کمی خنده دار به نظر برسد، اما اختصار در عبارت های منظم مهم بوده و معنای آنها روشن و واضح است. روش های دقیق تری نیز برای نمایش کلاس های خاص از کاراکترهای مربوط به هم وجود دارد، برای نمونه استفاده از کاراکتر | هم معتبر بوده و در ادامه به آن پرداخته خواهد شد.

پیش از آنکه شروع به تمرین نحوه نوشتن عبارت های منظم کنیم، بهتر است تا نگاهی به سینتکس های بیشتر بیندازیم.

نقطه

نقطه . با هر کاراکتر منفردی به جز خط  جدید مطابقت دارد، بدین ترتیب که عبارت منظم c.t با رشته های cat ،crt ،c9t ،c%t ،c.t ،c t و غیره مطابقت می کند. اما اگر بخواهیم که با . نیز مانند کاراکترهای معمولی رفتار شود، باید عبارت منظم را به صورت c\.t تغییر دهیم و یا آن را در یک کلاس کاراکتر به صورت c[.]t قرار دهیم. به طور کلی این ایده ها قابل اعمال برای سایر متا کاراکترها نیز می باشند، برای نمونه می توان به کاراکترهای [، ]، )،(، * و غیره اشاره کرد.

پرانتز

پرانتزهای (( و )) به منظور گروه بندی کاراکترها مورد استفاده قرار می گیرند و از واژه token به معنای یک کاراکتر منفرد و یا عبارت پرانتزبندی شده استفاده می کنیم زیرا بسیاری از عملگرهای عبارت های منظم به هر دوی آنها اعمال می شوند.

از پرانتز برای تعریف capture groups نیز استفاده می شود، به این ترتیب می فهمید که کدام بخش از عبارت منظم توسط یک capture group خاص در عبارت منظم گرفته شده است، در ادامه به کاربرد این بخش بیشتر پرداخته خواهد شد.

کاراکتر +

+ پس از یک توکن نمایش دهنده یک یا تعداد بیشتری از همان توکن می باشد. برای نمونه عبارت *(baa(baa را می توان با استفاده از + و به صورت +(baa) نمایش داد. * به معنای صفر و یا تعداد بیشتری از تکرارها می باشد، ذکر این نکته ضروری است که پرانتزها در این میان نقش مهمی دارند، به طوری که عبارت +(baa) و +baa متفاوت اند، چرا که در اولی + برای کل توکن baa اعمال شده ولی در دومی تنها به کاراکتر a که قبل از آن قرار گرفته و عبارت منظم مطابق با رشته های baa ،baaa و baaaa است.

علامت سوال

? پس از یک توکن به معنای صفر یا یک نمونه از همان توکن می باشد.

تمرین

blog_19864_1

RegExr یک ابزار آنلاین بسیار خوب و کاربردی برای تمرین عبارت های منظم می باشد. زمانی که خواندن و نوشتن عبارت های منظم برای شما راحت شد، استفاده از API عبارت های منظم برای فریم ورک Foundation برای شما آسان تر می گردد و حتی پس از آن نیز می توانید جهت تست عبارت های منظم در ریل تایم از وب سایت استفاده کنید.

g/ در پایان عبارت به تنهایی بخشی از عبارت منظم نمی باشد و در حقیقت یک پرچم است که بر روی رفتار تطابقی کل انجین عبارت منظم تاثیر می گذارد. با افزودن g/ به یک عبارت منظم، انجین به دنبال تمامی تطبیق های ممکن از عبارت منظم در متن می گردد. های لایت آبی رنگ نشان دهنده تطبیق است و قرار دادن ماوس در اطراف عبارت منظم روشی کاربردی برای یادآوری بخش های تشکیل دهنده آن است.

عبارت های منظم با روش های متنوعی مورد استفاده قرار می گیرند و این موضوع به زبان یا کتابخانه مورد استفاده شما بستگی دارد، سینتکس ها و همچنین قابلیت ها و امکانات در نسخه های گوناگون فرق دارند. برای نمونه سوئیفت از الگوهای تعریف شده توسط ICU استفاده می کند.

در مطلب بعدی به مثال های کاربردی پرداخته خواهد شد که کار با عبارت های منظم را برای شما قابل درک می گرداند، با ما همراه باشید.

 

http://code.tutsplus.com برگرفته از

اینها را هم بخوانید