رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
عبارات باقاعده يا Regular Expression - قسمت اول
#1
آموزش عبارت باقاعده در سکوي .NET Frameworkهمراه با نرم افزارExpresso
قبل از پرداختن به مفاهيم اصلي عبارت باقاعده و ذکر مثالها، توصيه مي کنم ابتدا نرم افزار Expresso را که جهت تمرين و تست الگوهاي عبارت باقاعده طراحي شده است، از نشاني http://www.ultrapico.com دانلود کنيد. اين نرم افزار با استفاده از کتابخانه هاي کلاسهاي موجود در .NET Framework مي تواند شما را در توليد الگوهاي عبارات باقاعده و استفاده از آنها در برنامه هايتان ياري نمايد. ضمن اين که Expresso داراي يک سري الگوهاي عبارات باقاعده از پيش نوشته شده است که شما را در دسترسي سريع و آسان به الگوي عبارت باقاعده مدنظرتان بسياري ياري خواهد کرد.
يک مفهوم نام آشنا در بسياري از سيستمهاي کامپيوتري استفاده از کاراکترهاي "جايگزين شونده" يا "wildcard" ها در الگوهاي تطبيقي (pattren matching) مي باشد. اگر شما قصد داشته باشيد تمامي فايلهاي Microsoft Word را در يکي از شاخه هاي ويندوز بيابيد از عبارت "*.doc" ، براي جستجو استفاده خواهيد کرد. علامت ستاره (astrisk) به عنوان يک wildcard ي که مي تواند هر تعداد از کاراکترها را تطبيق دهد تفسير خواهد شد.
در نوشتن برنامه هايا صفحات وبي که با رشته ها و متون زياد سر و کله مي زنند اکثر اوقات شما به چنين الگوهايي حتي با پيچيدگي بسيار بيشتري نياز خواهيد داشت. خوب عبارات باقاعده هم به همين منظور ابداع و توليد شده است. سکوي .NET Framework يک مجموعه کامل از کتابخانه کلاس هايي که کاربرد عبارات باقاعده را در برنامه هاي کاربردي آسان مي سازد براي شما فراهم کرده است. با اين کتابخانه شما مي توانيد به آساني متني را جستجو و جايگزين کنيد، عنوان هاي پيچيده را رمزگشايي کنيد، زبانهاي مختلف را تجزيه کنيد يا اين که متني را اعتبار سنجي نماييد.
بهترين روش براي يادگيري سينتکس اسرار آميز عبارات باقاعده استفاده از مثالها و تجربه کردن آنها در برنامه هاي مختلف مي باشد. اين مقاله اصول اوليه عبارات باقاعده را به شما معرفي خواهد کرد و تعداد زيادي مثال را که در يک فايل کتابخانه Expresso قرار دارد به شما ارائه مي دهد. اما اصل کاربرد اين نرم افزار جهت آزمايش نمودن مثالها و نيز تست کردن صحت عملکرد عبارات باقاعده اي است که خودتان نوشته ايد و قصد داريد در برنامه ها به کار گيريد. اگر اجازه بدهيد شروع کنيم:





تعداد مثال ساده
قبل از اين که به ارائه مثال ها بپردازم توجه شما را به اين نکته جلب مي کنم که در اکثر مثالهاي ارائه شده در اين مقاله مي توانيد از نمونه متن زير جهت تست الگوهاي ارائه شده اقدام کنيد و توصيه مي کنم قبل از اين که توضيح الگو را بخوانيد حتما الگوي ارائه شده و نمونه متن را در نرم افزار Expresso امتحان کرده و نتيجه را مشاهده کنيد.



Tutorial Sample Data
Here is a space followed by backslash: " \"
Some people believe that Elvis is alive today.
It takes all kinds, I suppose. Elvis was sometimes
Known as "Elvis the Pelvis". Here is ELviS with
Weird capitalization.
Realistically, repeated words are easy to
to compose and hard to find.
The Queen of England visited Iraq and Qatar,
but she did not visit Quebec.
<body>Here is some text</body>
<p>A short paragraph</p>
aabab
SSN=
Phone numbers: 555-1212, 800 325-3535,
(650) 555-1212, (800) 325-3535, 650 555-1212
(650 555-1212.
Parentheses (ab(cd)ef) (g((hijk)l)m)n)o
SSN=123-45-6789
555-44-3333 42-33-7777
Zip=95070 55901-1234 90210 902101
IP Addresses: 123.456.789.012 255.243.190.101
12.1.34.2 12.1.34
Mississippi
One last phone number, filling the line.
555-1234



جستجوي کلمه Elvis
فرض کنيم شما مدت زماني را در اسناد خود براي يافتن شواهدي که Elvis هنوز زنده است (alive) صرف کرده ايد.





elvis براي يافتن elvis

Regular Expression
elvis
Sample Text and Search Results
Some people believe that Elvis is alive today.
It takes all kinds, I suppose. Elvis was sometimes
Known as "Elvis the Pelvis". Here is ELviS with
Weird capitalization.



يادداشت:
در اين مثال RegexOptions.IgnoreCase فعال شده است. شما به آساني مي توانيد با تنظيم گزينه اي (option) به معناي " چشم پوشي از بزرگ و کوچک بودن حروف " عبارتهايي مانند "ELVIS","Elvis","eLvIs"و . . . را نيز تطبيق دهيد. ضمن اين که شما مي توانيد به جاي استفاده از RegexOptions.IgnoreCaseاز الگوي[Ee][Ll][Vv][Ii][Ss] براي يافتن هر شکل از کلمه elvis استفاده کنيد. براکتهاي باز و بسته "[" , "]" در بيشتر مواقع براي جستجوي عبارات بدون توجه به بزرگ و کوچک ب ودن حروف استفاده مي ش ود. در خصوص اين نوع ساخ تارها بعداً بيشتر صحبت خواهيم کرد. گزينه هاي مورد بحث در اين سلسه مقالات در .NET Framework و در فضاي نام System.Text.RegularExprssions و در مجموعه شمارشي RegexOptions قرار دارند. اين گزينه ها را مي توانيد به صورت ترکيبي از OR هاي بيتي به سازنده کلاس Regexدر فضاي نام ذکر شده ارسال کرده و رفتار تطبيق الگوي خود را تغيير دهيد. براي اين مثال مي توانيد از سازنده زير جهت ايجاد يک شي از کلاس Regex همراه با گزينه هاي مورد نظر استفاده کنيد.



Using System.Text.RegularExpressions;
Regex rx=new Regex("elvis",RegexOptions.IgnoreCase|RegexOptions.CultureInvariant);

کد فوق به زبان C#نوشته شده است. شما اگر از VB استفاده مي کنيد براي ارسال ترکيب بيتي گزينه به سازنده به جاي علامت | مي بايست از کلمه کليدي OR استفاده کنيد.
متاسفانه الگوي elvis به تنهايي پنج حرف آخر کلمه "Pelvis" را نيز تطبيق داده است. براي جلوگيري ا زاين حالت مي بايست الگوي خود را به شکل زير تغيير دهيد:




\belvis\b کلمهelvis را به عنوان يک کلمه کامل و جدا از ساير کلمات پس و پيش خود مي يابد.

Regular Expression
\belvis\b
Sample Text and Search Results
Some people believe that Elvis is alive today.
It takes all kinds, I suppose. Elvis was sometimes
Known as "Elvis the Pelvis". Here is ELviS with
Weird capitalization.

حالا کمي جالبتر شد. "\b" يک کد به خصوص است. با معناي اين که " موقعيت ابتدا يا انتهاي هر کلمه (words boundary)يا مرز کلمات را تطبيق بده." اين عبارت فقط عبارتهاي "elvis" که به طور کامل و جدا از ساير حروف هستند و با هر ترکيبي از حروف بزرگ و کوچک يافته و تطبيق مي دهد.
تا به اينجا هنوز متوجه نشديم که Elvis زنده هست يا خير؟ براي يافتن پاسخ بايد جستجو کنيم که آيا بعد از کلمه elvis کلمه alive قرار دارد يا خير. براي اين کار مي توانيم از الگوي زير استفاده کنيم:

\belvis\b.*\balive\b متني را که دا راي کمله elvis است و به دنبا ل آن کلمه alive آمده است جست جو مي کند.

Regular Expression
\belvis\b.*\balive\b
Sample Text and Search Results
Some people believe that Elvis is alive today.
It takes all kinds, I suppose. Elvis was sometimes
Known as "Elvis the Pelvis". Here is ELviS with
Weird capitalization.



خوب الحمد الله Elvis هنوز زنده است. در الگوي فوق از يک کاراکتر نقطه "." (period or dot) استفاده کرده ايم. نقطه يک کد ويژه است و هر کاراکتري به جز خط جديد (new line-\n) را تطبيق مي دهد. کاراکتر ديگري يکه در الگوي فوق به کار رفته است "*" است و به اين معناي تکرار صفر يا بي نهايت عبارت يا کاراکتر قبل از خود است و مي گويد " تضمين مي کنم هر تعداد از عبارت پيش از خود که موجود باشد براي شما تطبيق دهم." بنابراين ".*" به معناي تطبيق هر تعداد کاراکتر به غير از کاراکتر خط جديد مي باشد. ترکيب دو کاراکتر ".*" يک قالب ساده براي ايجاد يک عبارت باقاعده به مفهوم جستجوي هر چيزي به غير از خط جديد بين دو کلمه elvis و alive است.
يادداشت:
شما مي توانيد با فعال کردن گزينه RegexOptions.Singleline کاري کنيد که "." بتواند حتي کاراکتر \n را نيز تطبيق دهد.
در با فقط تعداد کمي کاراکتر خاص ما توانستيم شروع به ساخت عبارات باقاعده مفيدي کنيم. اين در حالي است که قبلاً اين کار براي ما بسيار سخت و دشوار مي نمود. اجازه بدهيد مثال ديگري را امتحان کنيم:
فرض کنيم صفحه وب شما شماره تلفن هاي هفت رقمي مشتريان را گردآوري مي کند و شما مي خواهيد تشخيص دهيد که شماره تلفن وارده توسط مشتري درقالب صحيحي وارده شده است يا خير. xxx-xxxx يک فرمت صحيح است که در آن xيک عدد است. الگوي زير کل متن را براي يافتن چنين رشته اي جستجو مي کند:



\b\d\d\d-\d\d\d\dشماره تلفن هاي هفت رقمي را پيدا مي کند.

Regular Expression
\b\d\d\d-\d\d\d\d
Sample Text and Search Results
Phone numbers: 555-1212, 800 325-3535,
650 555-1212, (800)325-3535, (650) 555-1212,
650) 555-1212.
Mississippi
One last phone number, filling the line.
555-1234

هر "\d" به معناي تطبيق يک عدد تکت رقمي است. کاراکتر "-" معناي خاصي نداشته و به عنوان يک حرف عادي تفسير شده و يک خط تيره را تطبيق مي دهد.
براي اجتناب از تکرارهاي بي مورد و خسته کننده مي توانيم از نمادگذاري هايي که جهت خلاصه نويسي مهيا شده اسند استفاده کنيم. در مورد اين مثال مي توانيم عبارت باقاعده زير را به کار ببريم:


\b\d{3}-\d{4}

Regular Expression
\b\d{3}-\d{4}
Sample Text and Search Results
Phone numbers: 555-1212, 800 325-3535,
650 555-1212, (800)325-3535, (650) 555-1212,
650) 555-1212.
Mississippi
One last phone number, filling the line.
555-1234

نتيجه به دست آمده همان نتيجه مثال شماره 4 است. "{3}"يا"{4}" به همراه "\d" به معناي تکرار کاراکتر قبلي به تعداد دقيقاً سه يا چهار مرتبه است.
به نظر رسيده که حالا نوبت اين رسيده که بدانيم چگونه مي توان صحت الگوهاي خود را بيازماييم.
تنبلي نکنيد. نرم افزار Expresso را دانلود کنيد و در سيستم خود نصب کنيد. چون مطمئناً جهت آشنايي با عملکرد الگوهايي که به زبان عبارت باقاعده نوشته ايد به يک نرم افزار تخصصي در اين زمينه نياز خواهيد داشت.

Expresso
اگر شما اعتقاد داريد که يادگيري عبارات باقاعده دشوار نيست، فرض من بر اين خواهد بود که شما شخصي بسيار باهوش هستيد يا اينکه از سياره اي ديگر به اين کره آمده ايد. سينتکس عبارات باقاعده مي تواند هر شخصي را که به طو
[عکس: <a href=www.Mojsazan.com.gif]" class="mycode_img" />
پاسخ
سپاس شده توسط


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  کتاب Regular Expression آموزش مهرداد عباسی 0 5,083 01-04-2012, 07:30 AM
آخرین ارسال: مهرداد عباسی

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان