عبارت باقاعده

بندانگشتی
**عبارت باقاعده**، که تحت عنوان **regex** یا **regexp** (مخفف عبارت انگلیسی *regular expression*) نیز نامیده می‌شود در علوم رایانه، به معنی تطبیق رشته در متن است، که از قبیل نویسه‌های خاص، کلمات و الگوهایی از نویسه‌ها می‌باشد. یک عبارت باقاعده با زبان معمولی نوشته می‌شود که می‌تواند توسط یک پردازشگر عبارت باقاعده، یا یک برنامه که به عنوان تولیدکنندهٔ مترجم یا بررسی‌کنندهٔ متن و تشخیص قسمت‌هایی از آن به وسیلهٔ مشخصات استفاده شود.

این نمونه‌ها می‌توانید قابلیت‌ها محدودی که عبارت با قاعده می‌تواند انجام دهد را نشان دهد:
* دنباله‌ای از نویسه‌های «car» در هر متن، از قبیل «car", "cartoon» یا «bicarbonate»
* لغت «car» در زمانی که به صورت جداگانه استفاده شود
* لغت «car» وقتی که قبل از «blue» یا «red» آمده باشد
* یک نویسهٔ «$» که پس از آن یک یا چند رقم بیاید و پس از آن به صورت اختیاری یک ممیز بیاید و پس از ممیز دقیقاً دو رقم اضافه قرار داشته باشد (مانند  «$۱۰» یا  «$۲۴۵٫۹۹»)

عبارت‌های باقاعده می‌توانند خیلی پیچیده‌تر از این مثال‌ها باشند.

## مفاهیم اولیه
عبارت با قاعده مجموعه ای از رشته‌ها مشخص است. برای مشخص کردن این رشته‌ها قوانین کوتاه‌تر از زمانی که لیستی از اعضای این مجموعه است؛ مثلاً، مجموعه که ۳ رشته بدین صورت است:Handel, Händel, Haendel , به شکل `H(ä|ae?)ndel` است. همچنین اگر حداقل یک عبارت منظم موجود باشد که با یک عضو خاص مجموعه یکی باشد آنگاه تعداد نامحدودی از این نوع عبارات داریم. برای ساختن عبارات با قاعده می‌توان از عملیات‌های زیر استفاده کرد.
;بولی «یا» (or)

یک خط عمودی است که ۲ آلترناتیو را جا می‌کند:`gray|grey` که همان "gray" or "grey" است.

;گروه‌بندی

کمانک که برای تعریف دامنه و اولویت بندی عملگرا به کار می‌رود؛ مثلاً:`gray|grey` و `gr(a|e)y` معادل یکدیگرند و هر دو مجموعه "gray" و "grey" را توصیف می‌کنند.

;سور

**سور**، در منطق فلسفی و منطق ریاضی، نشانه‌ای است که دایرهٔ مصداق‌ها را مشخص می‌کند. سورها شامل «هر» (∀)، «هیچ» و «برخی» (∃) هستند. سورها معروف عبارتند از ستاره و علامت سؤال و علامت مثبت و منفی
و ستاره کلین است.

این ساختارها می‌توانند ترکیبی از چند عبارت دلخواه باشد.

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

## تاریخچه
[بندانگشتی|[استیون کول کلینی]]
ریشه عبارات با قاعده درزبان صوری و نظریه اتوماتا است؛ و هر دوقسمتی از علوم نظری رایانه‌اند. این رشته به مطالعه مدل‌های محاسباتی و راه‌های توضیح و توصیف زبان‌ها می‌پردازند. ریاضیدان معروف استفان کل کلین از این مدل برای توصیف مفاهیم ریاضی به نام مجموعه منظم که در سال ۱۹۳۰ (میلادی) روش کار می‌کرد استفاده کرد. زبان اسنوبول اجرایی از تطبیق الگو ولی با عبارات با قاعده یکسان نبود. کنت تامسون از مفهوم کلین استفاده کرد و با کمک یکی کردن الگوهای پرونده نوشتاری، ویرایشگر متن را به وجود آورد. او سپس این قابلیت را به یونیکس اضافه کرد که منجر به استفاده عبارت با قاعده گرپ در جستجوها شد.
از آن زمان بسیاری از تغییرات انطباق اصلی تامپسون از عبارات منظم به‌طور گسترده در یونیکس و AWK و ایمکس و لکس استفاده شده‌است.

## فرضیه رسمی زبان
عبارات با قاعده زبان منظم را درزبان صوری توضیح می‌دهد. قدرت بیان آن‌ها مانند گرامر منظم یکی است.

### تعریف رسمی
عبارات منظم از تعدادی نمادهای ثابت و اپراتور تشکیل شده‌است که مشخص‌کننده مجموعه‌ای از این رشته‌ها و عملگراها در این مجموعه است. این یک تعریف رسمی است و در کتاب‌های مربوط به ترجمه زبان‌ها یافت می‌شود. با توجه به حرف Σ , شرح‌های زیر به عنوان عبارات با قاعده تعریف می‌شوند:
* (*empty set*) با ، به معنی مجموعه  است.
* (*[[empty string]]*) با ε , نشان دهنده مجموعه‌ای است که دارای رشته‌های خالی است و هیچ کاراکتری ندارد.
* (*[[string literal|literal character]]*) مثل *<code>a</code>* در Σ نشاندهنده مجموعه‌ای است که فقط دارای کاراکتر *a*است.

با توجه به عبارت منظم R,S , عملگراهای زیر برای تعریف عبارت با قاعده تعریف می‌شوند.
* (*الحاق*) RS بدین صورت معنی می‌شوند:
 { αβ | α in set described by expression *R* and β in set described by *S* } مثلاً:
  {"ab", "c"}{"d", "ef"} = {"abd", "abef", "cd", "cef"}
* (تناوب) R | S که نشان دهنده اجتماع بین مجموعه‌های R و S است؛ مثلاً:
if R describes {"ab", "c"} and S describes {"ab", "d", "ef"}, expression *R* | *S* describes {"ab", "c", "d", "ef.
* (ستاره کلین) نشاندهنده کوچکترین زیرمجموعه R است که و شامل ε و نسبت به عمل الحاق بسته‌است. این مجموعه‌ای از رشته‌هایی است که می‌توان با متصل کردن تعداد محدودی از رشته‌های R , تعریف کرد؛ مثلاً:*{"۰","۱"} مجموعه محدودی از رشته‌های باینری است.

### مثال
* `a|b*` نشاندهنده {ε, "a", "b", "bb", "bbb", ...} است.
* `(a|b)*` نشاندهنده گروهی از مجموعه‌ها است که فقط دارای "a" و "b" است: {ε, "a", "b", "aa", "ab", "ba", "bb", "aaa", ...}.
* `ab*(c|ε)` نشاندهنده مجموعه‌ای از رشته‌ها است که با "a" شروع می‌شود؛ و بعد آن هیچ یا با چندین b ,c می‌آید: {"a", "ac", "ab", "abc", "abb", "abbc", ...}.

## نحو (سینتکس)
مجموعه‌ای از کاراکترها که نشان‌دهنده فعالیتی هستند. اما می‌توانیم با استفاده از کاراکتر Escape آن‌ها را کاراکتر معمولی جلوه دهیم. همچنین به جای کاراکتر EScape از "\" استفاده کرد.

### عبارت باقاعده بر مبنای پازیکس
یونیکس‌های سنتی نیز همان قواعد مشترک را در عبارت با قاعده دارد اما امکان دارد در بعضی از ابزار متفاوت است. پازیکس (POSIX) که مخفف « **P**ortable **O**perating **S**ystem **I**nterface [for Uni**x**]» است، عبارت است از مجموعه استانداردهایی که برای نامگذاری و تعریف شمایل رابط برنامه‌نویسی کاربردی در محیط‌های شبه-یونیکس در آی‌تریپل‌ایی تعریف شده‌اند. این استانداردها تحت نام کلی IEEE 1003 و نام بین‌المللی ISO/IEC 9945 شناخته می‌شوند، امکان همسان‌سازی و ارتباط و پرت کردن آسان‌تر بین محیط‌های یادشده را فراهم می‌آورد. واژهٔ پازیکس پیشنهاد بنیان‌گذار بنیاد نرم‌افزار آزاد، ریچارد استالمن بود.
در سینتکس BREکه مخفف (Basic Regular Expressions) اغلب کاراکترها تحت‌الفظی است و فقط با خودشان برابرند؛ مثلاً `a` برابر "a" است. استثناهای زیر نیز وجود دارد که *متا کاراکتر * گویند.

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

## جستارهای وابسته
* زبان منظم
* فرم بکوس-نائور

## منابع

* [//en.wikipedia.org/w/index.php?title=Regular_expression&oldid=373634195 ویکی‌پدیای انگلیسی]
* 
* 
* 

## برای مطالعهٔ بیشتر
* Comparison of regular expression engines
* Extended Backus–Naur Form
* List of regular expression software
* Regular tree grammar

رده:اتوماتا (رایانش)
رده:تطبیق الگو
رده:زبان‌های صوری
رده:ساختارهای برنامه‌نویسی
رده:عبارت‌های باقاعده
رده:معرفی‌شده‌های ۱۹۵۱ (میلادی)
رده:نظریه اتوماتا