در بین حجم عظیمی از توابع php , توابع کار با رشته ها بسیار زیاد , محبوب و پر استفاده هستند . بنابراین , انجام عملیات بر روی رشته ها (string) مثل چسباندن (concatenation) , implode/explode , محاسبه طول رشته و غیره با توابع کار با رشته ها در php امکان پذیر است.
در بین این ها , قصد داریم فقط تابع های رشته ای که قسمت مورد نیاز از رشته را استخراج می کنند را بررسی کنیم . این توابع عبارت اند از ,
- Substr() – این تابع برای استخراج رشته با تعریف کردن ترتیب آن استفاده می شود
- mb_substr() – همانند تابع substr() , بجز اینکه سرعت و کارایی زیادی در امنیت و مدیریت عملیات های مالتی بایت (multi-byte) دارد
- preg_match() – برخلاف توابع کار با رشته ها ی بالا , این تابع فقط فرمت regular expression یا همان عبارت های باقاعده را برای جستجو در ورودی رشته می پذیرد.
هرکدام از تابع کار با رشته ها ی php بالا آرگومان های متفاوتی را برای انجام عملیات می پذیرند , همچنین نوع داده متفاوتی را برگشت می دهند . جزییات این قسمت ها را در ادامه مقاله بررسی می کنیم.
برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود
تابع substr()
تابع substr() یک ورودی رشته برای استخراج قسمت خاصی از آن را می پذیرد . و این تابع همچنین دو پارامتر برای محدودیت استخراج شروع و پایان یک رشته دریافت می کند
سینتکس کلی تابع substr() به صورت زیر است .
1 |
substr($input_string, $start_limit, $end_limit); |
Substr() باید دو پارامتر اول را داشته باشد درحالی که پارامتر end_limit اختیاری (optional) است . به طور پیش فرض , اگر این مقدار را ست نکنیم , کل طول رشته توسط end_limit گرفته می شود.
مقدار شروع و پایان , مقدار عددی را قبول می کند . اگر مقدار عددی به صورت مثبت باشد , نقطه شروع استخراج رشته , از اول رشته شروع می شود و اگر مقدار عددی منفی باشد , محاسبه از آخر رشته به طرف عقب شروع می شود .
اسکریپت php زیر , تمام احتمالات ورودی مقدار تابع substr() برای استخراج قسمتی از متن را نشان می دهد.
1 2 3 4 5 6 7 8 9 |
<?php $input_string = "String Extract"; echo substr($input_string,2)."<br/>"; echo substr($input_string,2,4)."<br/>"; echo substr($input_string,-2)."<br/>"; echo substr($input_string,-2,4)."<br/>"; echo substr($input_string,2,-4)."<br/>"; echo substr($input_string,-4,-2)."<br/>"; ?> |
در کد php بالا , اجازه بدید آخرین دستور echo که حاوی دو عدد منفی است را بررسی کنیم . تا زمانی که مقدار start_limit برابر -۴ است , pointer یا همان نشانگر از از اخر رشته شروع می کند و چهار کاراکتر به عقب باز می گردد و کاراکتر r را انتخاب می کند و دومین کاراکتر از آخر نیز حرف a را استخراج می کند . همینطور , تمام دستورات echo بالا قسمت های مخصوص به خود را طبق ورودی های داده شده دریافت و در صفحه چاپ می کنند.
تابع mb_substr()
تابع mb_substr() بسیار شبیه تابع substr() می باشد , اما این تابع امنیت و سرعت عملکرد خوبی در هنگام اجرا را دارد . پیشوند mb_ در mb_substr() اشاره به این دارد که این تابع توانایی انجام عملیات multi-byte را دارد .
در واقع multibyte یک اینکدینگ برای توابع است که بتوانند مثل utf8 که وظیفه نمایش نوع نوشتار را دارد , در بین رشته ها اعم از هر کاراکتر زبان های فارسی , چینی یا هر کاراکتر ناشناخته! جستجو کند و قسمت مورد نظر را استخراج کند.
همانند تابع substr() , این تابع پوزیشن یا مکان رشته را بنابر طول آن صفر درنظر می گیرد . همچنین تابع mb_substr() یک آرگومان اضافی تر برای اینکدینگ کاراکتر (character encoding) می پذیرد.
آرگومان چهارم این تابع نیز مانند $end_limit اختیاری است . به طور پیش فرض , اگر مقداری برای character encoding مشخص نشود , اینکدینگ کاراکتر به صورت داخلی انتخاب می شود.
تابع preg_match()
برخلاف توابع substr() و mb_substr , تابع preg_match() یکی از توابع کار با رشته ها در php است که به جای عدد , یک الگو (pattern) در فرم regular expression یا عبارت های باقاعده برای جستجو در متن را قبول می کند . با استفاده از الگو ها می توانیم به صورت بسیار حرفه ای و موثر تر دقیقا همان متن یا کاراکتر مورد نظر را از رشته استخراج کنیم .
تابع preg_match() فقط برای استخراج موارد تطابق یافته نیست بلکه برای بررسی اینکه یک مقدار در رشته وجود دارد یا خیر نیز به کار می رود .اگر مقدار ۱ را برگرداند , یعنی مقدار پیدا شده است در حالی که دو تابع بالا فقط قسمت مشخص شده را برگشت می دهند .
آرگومان های مورد نیاز این تابع عبارت است از .
- الگوی عبارت های با قاعده
- رشته مورد نظر
- آرایه خروجی برای موارد یافت شده
- فلگ که مقدار پیش فرض ۰ را دارد . اگر فلگ PREG_OFFSET_CAPTURE ست شده باشد , آفست رشته به همراه قسمت تطابق یافته را برگشت می دهد.
- Offset قسمت مورد از رشته که قصد شروع جستجو را دارد.
مثال زیر نحوه استفاده از تابع preg_match() که از توابع کار با رشته ها در php است را نمایش می دهد.
1 2 3 4 5 6 |
<?php preg_match("/[0-9]+/", "preg_match offset parameter is added since PHP 4.3.",$matches,PREG_OFFSET_CAPTURE,0); print "<pre>"; print_r($matches); print "</pre>"; ?> |
در الگوی بالا مشخص کردیم که فقط اعداد ۰ تا ۹ در رشته موردنظر جستجو شود و همچنین انتظار می رود موارد یافت شده را در قالب یک آرایه برگشت دهد . دستور print_r خروجی تابع preg_match را به صورت آرایه ای چاپ می کند.
1 2 3 4 5 6 7 8 |
Array ( [0] => Array ( [0] => 4 [1] => 48 ) ) |
تا زمان که فلگ PREG_OFFSET_CAPTURE ست شده باشد , آفست موزد نظر همانند خروجی بالا برگشت داده می شود . همانطور که میبینید عدد ۴ که در ۴۸مین قسمت رشته مورد نظر یافت شده است .
این فقط لیست کوچکی از توابع کار با رشته ها در php بود و مطمینا موارد بسیار زیادی هست که امیدوارم فرصت شود در مقالات بعدی به موراد دیگری از توابع کار با رشته ها در php بپردازیم.
هر گونه مشکلی در پیاده سازی کدها داشتید ، از قسمت نظرات اقدام کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید.