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

عبارات با قاعده عموماً با نام regex یا RegExp شناخته می‌شوند. عبارات با قاعده، متن‌های فرمت بندی شده‌ای هستند که، برای یافتن الگوهای متنی مورد استفاده قرار می‌گیرند. امروزه عبارات باقاعده یکی از قویترین ابزارهایی هستند که امروزه به صورت کاربردی برای پردازش و دستکاری رشته‌ها (متن‌ها) مورد استفاده قرار می‌گیرند. به عنوان مثال می‌توان از عبارات با قاعده برای بررسی درست بودن فرمت داده‌ی دریافتی (ایمیل، شماره تلفن، کد پستی و …) از کاربر مورد استفاده قرار گیرد یا اینکه محتوای خاصی را درون یک متن جستجو کرد و تغییر داد.

PHP از ورژن 5.3 به بالا از استاندارد عبارات باقاعده‌ی تحت استاندارد perl پشتیبانی می‌کند که با استفاده از سری توابع …_preg قابل استفاده هستند. چرا PHP از عبارات باقاعده تحت استاندارد perl پشتیبانی می‌کند؟ زیرا Perl اولین زبان برنامه نویسی بود که پشتیبانی یکپارچه از عبارات منظم را ارائه می‌داد و از عبارات منظم و قابلیت‌های فوق العاده پردازش متن و دستکاری آن به صورتی قدرتمند پشتیبانی می‌کند. حالت کلی استفاده از عبارات با قاعده به صورت زیر می باشد :

 /pattern/modifiers; 

که در آن pattern همان الگو و modifiers هم اصلاح کننده می باش که در ادامه در مورد این دو بیشتر توضیح می دهیم. قبل از اینکه بخواهیم به عبارات با قاعده بپردازیم، ابتدا به یک مرور کلی از توابع مرتبط با عبارات با قاعده در PHP که معمولاً استفاده می‌شوند، می‌پردازیم :

متد کاربرد
()preg_match یک عبارت باقاعده را اجرا می‌کند.
()preg_match_all یک عبارت باقاعده را به صورت سراسری اجرا می‌کند.
()preg_replace توسط عبارت باقاعده جستجو انجام می‌شود و موارد یافت شده جایگزین می‌شوند.
()preg_grep یک آرایه را به عنوان ورودی دریافت می‌کند و مواردی را که با عبارت با قاعده تطبیق می‌کنند را، برمی گرداند.
()preg_split یک متن را با توجه به عبارات با قاعده به قسمت‌های کوچکتر تقسیم می‌کند.
()preg_quote توسط عبارت نامنظم جستجو انجام می‌شود و موارد یافت شده درون کوتیشن قرار می‌گیرند.

نکته: تابع ()preg_match بعد از اینکه اولین مورد را پیدا کند جستجو را متوقف می‌کند در حالی که تابع ()preg_math_all به جستجو ادامه می‌دهد و همه موارد را تا جایی که ممکن باشد پیدا می‌کند.

دستورهای عبارات با قاعده

دستورهای عبارات با قاعده شامل یک سری عبارت‌های خاص می‌شوند (آنها را با کاراکترهای خاص html اشتباه نگیرید). کاراکترهایی که در عبارات با قاعده معنای خاصی دارند به صورت زیر هستند :

.    *    ?    +    []    ()    {}    ^    $    |    \

هرجا که انتظار دارید این کاراکترها رفتاری همانند رفتار کاراکترهای عادی از خود نشان دهند، کافیست که قبل از آنها یک بک اسلش (\) قرار دهید و آنها را به لیترال (literal) تبدیل کنید. به عنوان مثال اگر شما می‌خواهید به دنبال کاراکتر نقطه بگردید، می توانید به صورت .\ عمل کنید. همه‌ی کاراکترهای دیگری که در بالا به عنوان کاراکترهای معنادار در regex به آنها اشاره شد با قرار گرفتن یک بک اسلش قبل از آنها به لیترال تبدیل می‌شوند (به عنوان کاراکتر عادی در نظر گرفته خواهد شد و به عنوان دستورات عبارات با قاعده تفسیر نمی‌شوند). مجموعه کاراکترهای بالا منجر به ایجاد شدن فرمول‌ها و قوانینی در عبارات با قاعده می‌شوند که در ادامه به توضیح آنها می‌پردازیم. همانطور که در بالا اشاره شد، متدهای مختلفی برای کار با عبارات با قاعده وجود دارد، که ما در اینجا برای مشاهده خروجی از متد ()preg_replace استفاده می کنیم. به مثال زیر توجه کنید :

 1: <?php
 2:     $pattern = "/[a]/";
 3:     $text = "He was eating cake in the cafe at 7:30.";
 4:     $replacement = "<b>$0</b>";
 5:     
 6:     echo preg_replace($pattern, $replacement, $text);    
 7: ?>

در خط 2 کد بالا، عبارت /[a]/ بدین معناست که ما تمام حروف a را می خواهیم. خط 3، جمله ای است که قرار است حروف a در داخل آن جستجو شوند. در خط 4 هم گفته ایم که بعد از اینکه حروف a پیدا شدند، با عبارت <b>a</b> جایگزین شوند. این کار باعث می شود همه حروف a موجود در جمله به صورت ضخیم نمایش داده شوند (البته اینکه ما از ضخیم کردن استفاده کرده ایم برای این است که، شما بهتر متوجه عملکرد عبارات با قاعده شوید). اگر کد بالا را اجرا کنید خروجی به صورت زیر خواهد بود :

حال به صورت زیر بر روی صفحه راست کلیک کرده و گزینه View Page Source را بزنید:

با کلیک بر روی گزینه مذکور مشاهده می کنید که تمام حروف a بین تگ <b> قرار گرفته اند :