مقدمه
در دو
درس قبلی با چند نوع برای بررسی دادههای ارسال شده توسط کاربران آشنا
شدیم. یاد گرفتیم که باید همیشه این دادهها را بررسی کرد و بدون بررسی
دقیق آنها اجازه وارد شدن به پایگاه صادر نکنیم. در این درس با مبحث
تازهای به نام عبارت منظم آشنا میشویم.
عبارات منظم
عبارات منظم یک تکنیک است که توسط آن میشود یک متن را بر اساس الگوی
دلخواه بررسی کرد. شیوه کار آن این است که ما ابتدا یک الگو تعریف میکنیم و
بعد دادهها را بر اساس آن الگو ارزیابی میکنیم. یعنی با توجه به الگوی
تعریف شده٬ ماهیت داده را جستجو کرده و اگر همخوانی داشت مهر تایید به آن
میزنیم. به زبان سادهتر میشود٬ جستجوی یک متن برای اینکه ببینیم آیا با
الگوی تعریف شده ما میخواند یا نه؟ اجازه بدهید با یک مثال این مقوله را
بهتر بیان کنیم. فرض کنید که میخواهید ببینید که آیا درون کلمات ورودی حرف
b وجود دارد یا نه. برای این کار یک الگو میسازیم که کلمههای ورودی را با الگوی ما مقایسه کند و در صورت برابری (وجود b در متن مورد نظر) خروجی «۱» به معنی مثبت بدهد.
ساخت
یک عبارت منظم٬ ساختار منحصر به فرد خود را دارد٬ این یعنی باید از یک
سری قوانین مشخص پیروی کنیم. اما پیاده سازی عبارت منظم در پیاچپی توسط
توابعی صورت میگیرد. تابعی که ما از آ> بیشتر استفاده میکنیم تابعpreg_matvh() است.
Preg_match ( الگو , داده ) ;
Preg_match ( ‘/b/’ , ‘babak’ );
همانطور که در مثال بالا گفته شد٬ یک عبارت منظم نوشته شده است تا وجود حرف b را در مقادیر وارد شده بررسی کند (که در اینجا ‘babak’ است).
الگویی
که برای بررسی میسازیم باید در بین علامت نقل قول قرار گیرد یا همان " "
خودمان. ابتداییترین و آخرین حرف این الگو هم نشانه آغاز و پایان بارت
هستند که به آنها نشانه میگوییم. این نشانه میتواند هر کاراکتری باشد٬
اما باید کاراکتری باشد که شما در داخل عبارت استفاده نمیکنید. یعنی اگر
قرار است در داخل مقدار ورودی دنبال علامت سوال ؟ بگردید٬ نباید از این
علامت برای آغاز و پایان الگو استفاده کنید. در مثال بالا ما از / استفاده کردیم٬ میتوان از کاراکترهایی مثل ! یا | هم استفاده کرد. باز این بستگی به کاربرد الگو دارد.
قسمتهای تشکیل دهنده الگو در عبارات منظم
- نشانه یا آغاز و پایان الگو Delimiter
همانطور
که قبلا هم گفتیم باید از یک کاراکتر یکسان (یکی در آغاز و یکی در پایان)
برای مشخص کردن شروع و پایان الگو استفاده کنیم. کاراکترهایی مانند/, |, ? یا # بسته به اینکه اگر در داخل متن ورودی دنبال آنها نگردیم٬ انتخاب خوبی هستند.
- لفظها Literal
لفظها در اصل همان حروف یا کاراکترهایی هستند که ما در داخل متن دنبال آنها هستیم٬ بطور مثال اگر میخواهید وجودasd را داخل متنی جستجو کنید٬asd همان لفظ شما است.
- کاراکترهای ویژه Metacharacter
کاراکترهای
ویژه٬ کاراکترهایی هستند که ما در داخل متن در جستجوی آنها نیستیم و آنها
برای ما معنی ویژهای دارند٬ بطور مثال علامت ^ یا. یا علامتهای ( ) از
این کاراکترهای ویژه هستند. مثلن علامت "." با هر کاراکتری برابری میکند.
وقتی در الگو از "." استفاده میکنیم٬ این یعنی در جای "." هر کاراکتری
میتواند باشد٬a یا c ـ یا هر کاراکتر دیگر. علامت ^ هم یعنی آغاز الگوی متنی ما. بطور مثال^a یعنی هر متنی که باa آغاز شود. در زیر فهرستی از چند کاراکترهای ویژه با معنی آنها میآوریم:
^: آغاز رشته مورد نظر را بیان میکند که در الگو استفاده میشود.
$: پایان رشته مورد استفاده در الگو
. : هر کاراکتر تنهایی
| : انتخاب بین دو واژه٬ بطور مثال a | S یعنی یا a یا s
[]: این دو کاراکتر آغاز و پایان یک مجموعه یا لیست از موارد مورد استفاده در الگو را بیان میکنند٬ که به آن کلاس میگوییم.
؟ : معنی صفر یا یک کاراکتر را میدهد.
* : معنی صفر کاراکتر یا بیشتر
+: یک کاراکتر یا بیشتر
{}: شروع و پایان یک محدوده برای جستجو را تعیین میکنند. مثلا{x,y} یعنی که ازx تا y را جستجو کن. فرض کنید که میخواهیم از a d را جستجو کنیم٬ پس میشود. {a , d } .