پرش به محتوای اصلی
رزرو مشاوره تلفنی تک جلسه‌ای با استاد رضوی
رزرو مشاوره تلفنی
کنکور کامپیوتر
0
اشتراک
 

عبارت منظم در نظریه زبانها چیست

این صفحه عالی به آموزش عبارت منظم در نظریه زبانها در نظریه زبان ها و ماشین ها پرداخته و عبارت منظم یا Regular Expression در برنامه نویسی را نیز بررسی کرده

در علوم کامپیوتر مبحثی وجود دارد با نام عبارت های منظم یا عبارات با قاعده (Regular Expressions) که به اختصار به آن Regex می‌گویند. عبارت های منظم، ترکیبی سمبلیک از حرف‌ها و علامت‌ها هستند که برای مقایسه و جستجو در رشته‌ها (Strings) مورد استفاده قرار می‌گیرند. استفاده از عبارت‌های با قاعده باعث می‌شود حجم کدهای نوشته شده و شرط‌های برنامه نویسی کمتر شود و علاوه بر قابل فهم بودن کد و راحتی نوشتن آن، فرایند اشکال زدایی (Debugging) و نوشتن تست نرم افزار بسیار ساده‌تر می‌شود. بهتر است با یک مثال عملکرد دقیق Regex را بررسی کنیم.

مثال‌هایی از عبارات با قاعده یا Regex

فرض کنید در حال ساختن یک وبسایت درگاه بانکی هستید و از کاربر می‌خواهید تا شماره کارت بانکی خود را وارد کند؛ همچنین برای جلوگیری ازباگ‌های احتمالی، قصد دارید تا قبل از تعامل با پایگاه داده و بررسی شماره حساب کاربر، از صحت الگوی حساب بانکی وارد شده اطمینان حاصل کنید. برای اینکار 2 راه‌کار پیش‌روی شما است، راه اول نوشتن چند شرط‌ از طریق کدنویسی است، راه دوم که راه ساده‌تر و کوتاه‌تری می‌باشد، استفاده از عبارت های منظم است. ما می‌دانیم که شماره کارت می‌بایست تنها از اعداد تشکیل شده باشند (نه حروف) و اینکه حتما 16 رقم داشته باشند؛ نه کمتر و نه بیشتر؛ بنابراین 2 شرط برای بررسی الگوی شماره کارت مورد نیاز است.

الگوی عبارت منظم این شرط به صورت ^\d{16}  است؛ بنابراین تنها کافی است بررسی کنیم آیا شماره کارت وارد شده طبق این الگو می‌باشد یا خیر. جلوتر درباره نحوه ساخته شدن این الگو بیشتر توضیح می‌دهیم؛ بنابراین همانطور که مشاهده می‌کنید، با استفاده از عبارت های منظم کارمان بسیار ساده‌تر شده است.

فلوچارت استفاده از عبارت منظم در مقابل فلوچارت استفاده از شرط معمولی

بررسی قوانین ابتدایی عبارات با قاعده (Regular Expressions)

نوشتن عبارات با قاعده در زبان های برنامه نویسی مختلف، ممکن است تفاوت‌های کوچکی با یکدیگر داشته باشند، اما منطق و نمادهای آن‌ها یکی است و با یادگرفتن اصول کلی آن می‌توانید در هر زبانی که خواستید از این عبارات استفاده کنید. در اینجا برخی از قوانین ابتدایی و مهم را باهم بررسی می‌کنیم:

  1. از \d برای الگوی عددی استفاده می‌شود.
    • عبارت “\d\d” معادل رشته‌ی "13" یا "01" است.
  2. از \w برای الگوی حروف انگلیسی استفاده می‌شود.
    • عبارت “\w\w\w” می‌تواند الگوی “abc” و “bob” را تشخیص دهد.
    • عبارت “\w\d\d”می‌تواند الگوی “a47” را تشخیص دهد.
  3. از نقطه یا . می‌توان برای جایگزین کردن هر حرفی استفاده کرد.
    • عبارت “….” تمامی الگوهای چهار حرفی را تشخیص می‌دهد، مانند “amir” و “25_H”.
  4. برای مشخص کردن تعداد تکرار حروف در عبارت های منظم از چندین علامت استفاده می‌شود. از علامت “?” برای تکرار دقیقا صفر یا یک بار، از علامت “*” برای تکرار صفر یا بیشتر و در نهایت از علامت “+” برای تعداد یک یا بیشتر استفاده می‌شود. نمونه‌های استفاده از هرکدام را در زیر مشاهده می‌کنید:
    • عبارت منظم “\w+” معادل رشته‌های “a” ، “ab” ، “reza” و... است.
    • عبارت منظم “a*b” معادل رشته‌های “ab” ، “acb” ، “abbbftjiorgtb” است.
    • عبارت منظم “\d?code” معادل رشته های “0code” ، “2code” و “code” است.
  5. برای استفاده از تعداد محدودی از حروف یا اعداد در یک الگو، از کروشه یا [ ] استفاده می‌کنیم.
    • عبارت “ [0123456789]\w+” تمامی رشته هایی که با یک عدد شروع می‌شوند را تشخیص می‌دهد.
    • عبارت“[ab]\d” معادل رشته‌های “a0” ، “b3” ، “a9” است.
  6. برای استفاده از عبارت "یا" از سمبل پایپ یا همان “|” استفاده می‌شود.
    • عبارت “ab|ba” تنها یکی از دو رشته‌ی “ab” و یا “ba” را می‌پذیرد.
  7. یکی از علامت‌هایی که برای تعداد حروف یک رشته شرط تعیین می‌کند، آکولاد یا { } است. روش‌های مختلفی برای استفاده از آکولاد وجود دارد.
    • نوع اول: تعداد دقیق تکرار: مانند {5} 
      • عبارت “\d{3}” معادل رشته‌ای با تعداد 3 رقم می‌باشد مانند “123” و یا “666”.
    • نوع دوم: تعیین دامنه برای تعداد: {2,4} یعنی حداقل 2 حرف و حداکثر 4 حرف
      • عبارت “\d{1,4}” رشته‌های “1” ، “12” ، “123” ، “1234” ، “458” و... را می‌پذیرد.
    • نوع سوم: برای تعیین حداقل: {2,} یعنی حداقل 2 و حداکثر بی‌‌نهایت.
      • عبارت “\w{2,}” معادل رشته‌هایی است که حداقل از 2 حرف تشکیل شده باشند؛ مانند “ab” و یا “konkur”.
  8. در عبارات با قاعده علامت‌هایی وجود دارند که با سمبل‌های بالا ادغام شده و مفهوم جدیدی را بوجود می‌آورند.
    • از علامت خط تیره (Dash) یا“-“ داخل [ ] برای ایجاد بازه استفاده می‌شود:
      • [a-z] یعنی تمامی حروف الفبای انگلیسی از a تا z
      • [0-9] یعنی تمامی اعداد از 0 تا 9
      • [b-g] معادل [bcdefg] است.
    • از علامت “^” یا Caret در اول [ ] می‌توان به عنوان نقیض استفاده کرد و روی رشته‌ها محدودیت حروف گذاشت.
      • عبارت[^0-9] یعنی تمامی حروف به غیر از دامنه اعداد 0 تا 9

بررسی چند مثال تخصصی از Regex

در این قسمت چند نمونه از الگو‌های Regex در دنیای واقعی را بررسی می‌کنیم.

بررسی آدرس ایمیل توسط Regex

یک آدرس ایمیل معتبر به شکل این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید می‌باشد، یعنی از یک Username تشکیل شده است، بعد از آن یک سمبل @ می‌آید؛ سپس نام Mail Server و در نهایت دامنه که با یک دات "." از Mail Server جدا شده است. الگوی عبارت منظم برای تشخیص الگوی یک آدرس ایمیل مانند زیر است:

/^[a-zA-Z0-9._]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/

  • “/”: شروع و پایان الگو را مشخص می‌کند.
  • “^”: مشخص کننده شروع رشته است. (در ابتدای رشته به عنوان مثال نمی‌توانیم از سمبل @ استفاده کنیم.)
  • “[a-zA-Z0-9._]+”: برای بررسی کردن این است که حداقل یک کاراکتر انگلیسی و حرف (در بخش نام کاربری) وجود داشته باشد، حداکثر هر تعدادی از حروف و ارقام می‌تواند باشد.
  • “@”: بررسی می‌کند که حتما علامت @ بعد از نام کاربری آمده باشد.
  • “[a-zA-Z0-9.-]+”: برای بررسی کردن قسمت نام Mail Server است که می‌تواند شامل حروف الفبای انگلیسی، ارقام و دات و... باشد.
  • “\.”: وجود یک نقطه بعد از نام Mail Server را بررسی می‌کند. این نقطه حتما باید وجود داشته باشد.
  • “[a-zA-Z]{2,}”: برای بررسی کردن نام دامنه است که می‌بایست تنها از حروف انگلیسی تشکیل شده باشد و حداقل باید 2 حرف را شامل شود.

بررسی رمز عبور توسط Regex

احتمالا موقع ثبت نام در یک وبسایت و تعیین رمز با یکسری مقررات خاصی مواجه شده‌اید، از اصولی‌ترین و معروف‌ترین این مقررات می‌توان به موارد زیر اشاره کرد:

  1. حداقل شامل 8 کاراکتر باشد.
  2. هم از حروف انگلیسی تشکیل شده باشد و هم از ارقام.
  3. حداقل از یک سمبل (مانند !@#$%^&*) در تعیین رمز استفاده شده باشد.
  4. حداقل از 1 حرف بزرگ یا Capital استفاده شده باشد.

کد Regex پیاده سازی این الگو به صورت زیر است:

^(?=.*[A-Z])(?=.*[!@#$%^&*])(?=.*[a-zA-Z])(?=.*\d).{8,}$

  • “/”: شروع و پایان الگو را مشخص می‌کند.
  • “(?=.*[A-Z])”: بررسی می‌کند تا حداقل یک حرف بزرگ وجود داشته باشد.
  • “(?=.*[!@#$%^&*])”: بررسی می‌کند تا حداقل یک سمبل در رشته وجود داشته باشد.
  • “(?=.*[a-zA-Z])”: بررسی می‌کند تا حداقل یک حرف انگلیسی بزرگ و یا کوچک در رشته‌ی رمز عبور وجود داشته باشد.
  • “(?=.*\d)”: بررسی می‌کند تا حداقل یک رقم در رشته‌ی رمز عبور وجود داشته باشد.
  • “.{8,}”: برای بررسی این است که رشته‌ی مورد نظر حداقل باید از 8 حرف (شامل تمامی موارد ذکر شده) تشکیل شده باشد که البته جای خالی شامل آن نمی‌شود.

عبارت منظم یا Regular Expression در برنامه نویسی

تا اینجا به بررسی تئوریات عبارت های منظم پرداختیم؛ بد نیست نگاهی به پیاده سازی آن در زبان‌های برنامه نویسی بی‌اندازیم.

پیاده سازی الگوی بررسی ایمیل به زبان PHP

پیاده سازی عبارت Regex برای بررسی ایمیل در زبان PHP به صورت زیر است:

$email = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید"; 
 
if (preg_match('/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/', $email)) {
    echo "Valid email address";
} else {
    echo "Invalid email address";
}

تابع Preg_Match() دو پارامتر به عنوان ورودی دریافت می‌کند؛ پارامتر اول الگو یا همان Pattern است، پارامتر دوم رشته‌ای است که قصد بررسی آن را داریم. در اینجا ایمیل مورد نظر در متغیر $email ذخیره شده است.

پیاده سازی الگوی بررسی رمز عبور در پایتون

پیاده سازی عبارت منظم بررسی رمز عبور در زبان برنامه نویسی پایتون به صورت زیر است:

import re
 
password = "SecurePass123!"
pattern = r'^(?=.*[A-Z])(?=.*[@!$%^&*])(?=.*[a-zA-Z])(?=.*\d).{8,}$'
 
result = "Valid password" if re.match(pattern, password) else "Invalid password"
print(result)

تابع Re.match() همانند زبان Php یک تابع است که دو ورودی دریافت می‌کند؛ ورودی اول الگوی Regex است و ورودی دوم رشته‌ی مورد بررسی. در اینجا عبارت منظم در متغیر pattern و رشته‌ی مورد نظر در متغیر password ذخیره شده است.

جمع‌بندی

عبارات منظم یکی از اصول مهم در برنامه نویسی و یافتن الگو‌های رشته‌ای در متون انگلیسی است. بسیاری از وبسایت‌ها و یا برنامه‌های هوش مصنوعی از این مبحث در کارهای خود استفاده می‌کنند. در این مقاله به بررسی چیستی عبارات با قاعده یا همان عبارت های منظم پرداختیم و مثال‌هایی را پیاده سازی کردیم تا با نحوه استفاده از این علم بیشتر آشنا شوید.

منظور از عبارت های منظم (Regular Expressions) چیست؟

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

چرا از عبارت های منظم استفاده می‌شود؟

عبارت های منظم به صورت یک الگو یا Pattern قابل پیاده‌سازی است و به وسیله آنها تنها با یک شرط که آیا رشته‌ی مورد نظر از الگو پیروی می‌کند یا خیر می‌توان به خواسته‌هایمان در مورد یک رشته برسیم. بدون عبارت های منظم ممکن است شروط بررسی یک رشته به ده‌ها عدد نیز برسد.

این مطلب چقدر به کارت آمد؟511111111115.00 از ۵ 3 رأی
اشتراک

پرسش و پاسخ داوطلبان کنکور ارشد کامپیوتر

سوال شما توسط استاد رضوی پاسخ داده می‌شود و از طریق پیامک به شما اطلاع رسانی می‌شود
×
kb
هیچ نظری ارسال شده در اینجا وجود ندارد
تلگرام اینستاگرام تماس با پشتیبانی: 09378555200 تماس با پشتیبانی: 09378555200
خدمات ما
پشتیبانی کنکور کامپیوتر

سؤالی داری؟ از ۸ صبح تا ۱۰ شب پاسخ‌گوییم.

تماس با پشتیبانی۰۹۳۷۸۵۵۵۲۰۰ پشتیبانی در تلگرامپاسخ‌گویی پیامی
شبکه‌های اجتماعی
کانال تلگرام اینستاگرام آپارات یوتیوب
اشتراک‌گذاری این مطلب

عبارت منظم در نظریه زبانها چیست

تلگرام واتس‌اپ ایکس
https://www.konkurcomputer.ir/عبارت-منظم-در-نظریه-زبانها.html
خدمات کنکور کامپیوتر
هر چیزی که برای قبولی لازم داری، یک‌جاخدمات ما

از مشاوره‌ی شخصی با استاد رضوی تا فیلم‌های دروس، پلتفرم‌ها و ابزارهای رایگان

مشاوره‌ی شخصی با استاد رضوی
تماس با پشتیبانی