PDA

View Full Version : عبارات باقاعده ( Regular Expressions ) در دات نت



csharper
جمعه 04 شهریور 1384, 18:21 عصر
امیدوارم این مقاله برای دوستان مفید باشد ...( ارائه دهنده Hamid.R Parvaresh == CSharper )

عبارات با قاعده Regular expressions تا کنون در ابزار ها و زبان های برنامه نویسی متعددی به بکارگرفته شده است. از جمله موارد آشنا در مورد کاربرد عبارات با قاعده می توان به اعتبار سنجی آدرس پست الکترونیک ، کلمه رمز ، .. اشاره نمود.
در سکوی دات نت هم که یکی از جدیدترین فناوریهای توسعه نرم افزاری می باشد فضای نام و مجموعه ای از کلاسهای متعدد برای بهره گیری از قدرت عبارات با قاعده موجود می باشد.

کلاسهای عبارات باقاعده موجود در چارچوب دات نت قسمتی از کتابخانه کلاس پایه می باشند که در این صورت هر زبان یا ابزاری که به زبان مشترک زمان اجرا (CLI) رجوع کند می تواند از این کلاس ها استفاده نماید که در این مقاله نمونه مثال هایی با زبان شی گرا و قدرتمند ( C#.Net ) ارائه می شود..

1.مقدمه :

لازم است ابتدا برای درک درست مبحث در مورد بعضی از موارد پایه ای توضیح داده شود با توجه به یک تعریف رسمی عبارت با قاعده عبارتی است که بتوان آن را از روی حروف الفبا و رشته تهی و با استفاده از عملگرهای اتحاد ، اتصال ، * یا + ایجاد کرد همانند
aabbaa و یا you (@) somewhere.com
در دات نت عبارت باقاعده عبارتی است که از کاراکتر های یونی کد، با استفاده از عملگرهای ؟ ، + ،*، | و. .. ایجاد شود .

عبارات با قاعده روش های قدرتمند ، راحت و کارا برای پردازش متن ارائه می کنند.
عبارات با قاعده به ما اجازه می دهد برای پیدا کردن الگوی کاراکتری خاص به سرعت مقدار زیادی از متن را تجزیه نموده و یا رشته ای را از متنی استخراج، ویرایش ، جایگذاری یا حذف نموده و یا حتی امکان اضافه کردن رشته استخراج شده از متن به یک مجموعه برای تولید گزارش را به ما میدهد .
در خیلی از برنامه هایی که با رشته ها ارتباط دارند
( همچون پردازش فایل HTML و یا تجزیه فایل log یا تجزیه عنوان HTTP ) عبارات با قاعده ابزاری ضروری می باشند.
عبارات با قاعده درون چارچوب دات نت بیشترین ویژگی های مورد پسند در دیگر زبانها همچون پرل(Perl) و.. را دارا بوده ضمن اینکه شامل دیگر خصوصیات تقریبا منحصر بفرد همچون تطبیق راست به چپ و کامپایل در هنگام اجرا نیز می باشد.

میتوان عبارات با قاعده را به عنوان زبانی فرض نمود که برای دستکاری در متون طراحی و بهینه سازی شده است این زبان شامل دو نوع کاراکتر ابتدایی می باشد :
کاراکتر های حرفی (Literal) و فوق کاراکتر ها که قدرت پردازش را به عبارات باقاعده میدهند.
احتمالا شما با فوق کاراکتر های ؟ و * که در سیستم فایلی داس برای نمایش یک کاراکتر یا گروهی از کاراکتر ها مورد استفاده قرار می گرفت(می گیرد) آشنایی دارید به طور مثال در دستور زیر که وظیفه آن کپی هر گونه فایل موجود در درایو C: با پسوند .doc بر روی دیسکت موجود در درایو :A می باشد ، فوق کاراکتر * به عنوان هر گونه فایلی در نظر گرفته می شود که دارای پسوند .doc میباشد .
عبارات با قاعده این ایده ابتدایی را چندین برابر توسعه داده اند و یک دسته بزرگ از فوق کاراکترها را ارائه کرده اند که امکان توصیف عبارات پیچیده برای تطابق متون با کاراکترهای نسبتا کمتر فراهم کرده اند.
به طور مثال : وقتی عبارت باقاعده برای بدنه یک متن به کار می رود تمامی رشته های
"s2000\" که با هر کاراکتر فاصله مثل space یا tab موجود می باشد را تطبیق داده و مشخص میکند. البته برای زبان سی شارپ (و c++, jscript ) می بایست این عبارت را به شکل
"s2000\\"بنویسیم .

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

یکی از ساده ترین عبارات با قاعده، زیر رشته می باشد برای نمونه عبارت باقاعده "فارس " با رشته "خلیج فارس " تطبیق دارد چونکه این رشته شامل عبارت با قاعده میباشد.
می توان به راحتی رشته هایی که با کاراکتر های خاصی شروع یا پایان می یابند را مشخص نمود :
کاراکتر ^ شروع رشته را تطبیق میدهد به طور مثال good^ با رشته های good morning , good evening , ... تطبیق میکند.
برای تطبیق انتهای رشته از کاراکتر $ استفاده میکنیم به طور مثال $ere با رشته های Where , There مطابقت میکند.
دسته کاراکترها [Character Classes] به ما اجازه میدهد مجموعه ای از کاراکترها را مشخص کنیم به طور مثال دسته [aeiou] با رشته "Hey" تطابق دارد ولی با "Zzz"نه
به عبارت دیگر رشته باید حداقل شامل یکی از کاراکتر های موجود در دسته باشد.
با استفاده از دسته کاراکترها همچنین میتوانیم یک محدوده ای را مشخص کنیم
به عنوان نمونه [0-9] با اعداد 0 ,5, 8 و به طور کلی هر عدد در این محدوده 0تا 9 تطابق خواهد داشت.
بعضی مواقع می خواهیم یک تعداد عدد مشخص را با یک الگوی مشخصی تطبیق دهیم برای مثال یک کد پستی 5 رقمی را در نظر بگیرید بنابراین به این شکل نوشته می شود:

^ [0-9] {5} $ یا ^\d {5 }$
( توجه : هنگام تایپ و خواندن از راست به چپ می باشد )
یعنی ابتدای رشته را تطبیق دهد ، با 5 رقم دنبال کند و بالاخره انتهای رشته را دنبال نماید به طور مثال این عبارت باقاعده با عدد 12345 که به طور فرضی یک کد پستی است تطابق دارد.
و یا عبارت ^[0-9]{5} – [0-9]{5} $ با یک کد 10 رقمی مثل 12345-09876 تطابق خواهد داشت.
دستور زبان یک عبارت باقاعده شامل تعدادی خصیصه می باشد که می توان با هم ترکیب نمود به طور مثال میتوان بوسیله ( ? !:) خاصیت غیر حساس بودن به بزرگ و کوچک بودن حروف را فعال نمود در نتیجه عبارت ( ?!:[aeiou] ) با رشته های hello و HELLO تطابق خواهد داشت ولی با Zzzz. نه .

در صورت علاقه دوستان ادامه خواهد داشت ....

2- .درک دستور زبان ابتدایی عبارات با قاعده در دات نت
3-.معرفی کلاس های عبارات با قاعده
4-. تعیین اعتبار ورودی کاربر بوسیله عبارات با قاعده
5-تعویض زیر رشته ها با استفاده از عبارات با قاعده
6-معرفی کنترل RegularExpressionValidator

Babak-Aghili
چهارشنبه 16 شهریور 1384, 21:14 عصر
ممنون . خلاصه و مفید ... چون هیچ وقت حوصله نکرده بودم از روی کتابها بخونمشون.

PalizeSoftware
چهارشنبه 16 شهریور 1384, 21:48 عصر
ممنون از مطالب
ادامه بدید منتظریم

بابک زواری
چهارشنبه 16 شهریور 1384, 23:48 عصر
ممنون میشیم اگر ادامه بدید

Semir
جمعه 18 شهریور 1384, 15:19 عصر
سلام
بیا باقیشم بگو خیلی مفید ِ.

ehsan_ansaripoor
شنبه 17 دی 1384, 22:45 عصر
آقا یک دنیا ممنون

meh_secure
پنج شنبه 29 دی 1384, 00:18 صبح
دستت درد نکنه. خداییش خیلی ردیف بود و حوصله هم می خواست هم نوشتنش و هم خوندنش(البته نوشتنش سخت تره) .

می خواستم بدونم منبع کاملی در این باره هست(غیر از msdn) میخوام بصورت فارسی باشه

amir master
پنج شنبه 18 اسفند 1384, 18:16 عصر
خوبه موفق باشی

shadishadishadi
یک شنبه 03 دی 1385, 01:18 صبح
خیلی ممنون
عالیه
لطفا ادامه داشته باشه

amir.NET2
یک شنبه 03 دی 1385, 07:54 صبح
بازم ادامه بده عالی بود

chemical
پنج شنبه 23 فروردین 1386, 18:05 عصر
ممنون میشم ادامه این مطالب رو بنویسین

golihaghighi
چهارشنبه 10 مرداد 1386, 09:36 صبح
ممنون از مطلب خوب شما
لطفا ادامه مطلب رو هم بنویسید

saed2006
شنبه 03 بهمن 1388, 13:49 عصر
بابا اینقدر این مقاله طرفدار داره یعنی هیچکی توی این سایت پیدا نمیشه ایت ها رو ادامه بده

skflower
یک شنبه 02 اسفند 1388, 01:42 صبح
آقا توروخدا ادامه بدید. این همه درخواست ...

milad465
یک شنبه 29 تیر 1393, 09:57 صبح
ساخت اتوماتیک رگولار اکسپرشن بدون یادگیری قواعد رگولار اکسپرشن. کافیه متن مورد نظر را وارد کنید و بگید کدام قسمتش مدنظرتونه. سپس زبان برنامه نویسی مدنظر خودتونو انتخاب می کنید کد براتون ساخته میشه
txt2re.com (http://txt2re.com/)

Hossis
یک شنبه 12 بهمن 1393, 18:50 عصر
ولی این که خود آدم قواعدش رو یاد بگیره بهتره
خیلی هم وقت نمی گیره ، فقط تمرین می خواد