csharper
جمعه 04 شهریور 1384, 19: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
عبارات با قاعده 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