×

System Alert: E_USER_DEPRECATED
Message: Passing a "Symfony\Component\Translation\MessageSelector" instance into the "Symfony\Component\Translation\Translator::__construct()" method as a second argument is deprecated since Symfony 3.4 and will be removed in 4.0. Inject a "Symfony\Component\Translation\Formatter\MessageFormatterInterface" implementation instead.
File: /home/netwinai/public_html/core/vendor/symfony/translation/Translator.php
Line: 90

شاید برای شما هم پیش آمده که بخواهید در یک متن دنبال یک کلمه یا عبارت بگردید و روی آن تغییرات دلخواه را اعمال کنید.

به عنوان مثال در متن دلخواه دنبال عبارت "دینامیت" بگردید و تمام آنها را به رنگ نارنجی دربیاورید و به صفحه ویکی پدیا واژه "دینامیت" لینکش کنید. یا مثال دیگر در موتور جستجوی داخلی سایتتون عبارت های جستجو شده را پررنگ یا Highlight کنید و خیلی کاربرد های دیگر.

یکی از روش های معمول استفاده از توابع کار با رشته حروف یا String هاست که PHP در این ضمینه بسیار قدرتمند است. استفاده از توابعی مانند strpos ، strlen یا نسخه mb_strpos که برای حروف فارسی و عربی بدون ایراد می شود.

ولی تابع (mb_strpos) برای پیدا کردن اولین کلمه ساده و سریع است منتها برای پیدا کردن همه ی کلمات در متن بخصوص متون طولانی، علاوه بر پیچیدگی برنامه، بدلیل حلقه for طولانی مصرف cpu بالایی دارد.

خوش بختانه در این مواقع روش Regular Expression یا همان RegEx با سرعت بالا به کمک ما می آید. در ادامه ی مطلب با نوین ایران باشید که چگونه با چند خط ساده بکمک RegEx (با قابلیت پشتیبانی از حروف فارسی و UTF-8) مسئله را حل کنیم.

ابتدا قبل از هر چیز اگر از متون دارای تگ های HTML استفاده می کنید مطمئن شوید که متن شما بدون تگ HTML است. دلیل این کار این است خود تگ های html جزو متن هستند و ممکن است بین واژه ها قرار گرفته و باعث عدم تشخیص توسط regex شوند.

برای اطمینان از حذف تمام تگ ها در متن از تابع پیشفرض strip_tags در PHP استفاده کنید. سپس می توانید از دستور زیر برای پیدا کردن تمام کلمات در متن دلخواه استفاده کنید:

$text = "Your Text, sample word and..."
$word = "sample"
$text = strip_tags($text);
$newText = preg_replace("|($word)|ui", "<span class=\"highlight\">$1</span>", $text);

متغیر $text متن شما و $word کلمه ی مورد نظر شما در متن است. نتیجه نهایی را در متغیر $newText مشاهده می کنید. در این مثال یک تگ span با کلاس highlight روی کلمات پیدا شده اعمال می کند شما می توانید آن را با تگ دلخواه خود جایگزین کنید. پسوند ui که در بعد از متغیر $word در regEx آمده به معنی پشتیبانی از کارکتر های utf-8 است. در صورت حذف آن نتیجه ی نهایی با زبان فارسی مشکل دار خواهد بود.