تعریف کاراکترهای غیر زبان انگلیسی در عبارات منظم (Regex)

۵ سال پیش(به روز شده در ۸ ماه پیش) پی اچ پی(PHP)(کد) ۷

عبارات منظم(Regex) در رابطه با رشته ها بسیار پر کاربرد هستند. یعنی با تعریف یکسری از قوانین می توان رشته ورودی را بدلخواه تغییر یا پردازش نمود. بعنوان مثال کد زیر هشتگ ها را شناسایی کرده و سپس بجای کلمه ، پیوند بهمراه با کلمه جایگزین می گردد. بعنوان مثال:

echo preg_replace('/#(\w+)/si', '<a href="#">#$1</a>', 'English #Text for test'); // out = English #Text for test

حال زمانی که حروفی غیر از حروف انگلیسی در متن باشد آنوقت است که تابع بالا بدرستی کار نمی کند(یعنی مشکل از Regex است) بعنوان مثال:

echo preg_replace('/#(\w+)/si', '<a href="#">#$1</a>', 'متن #فارسی برای تست'); // out = متن #��ارسی برای تست

جهت رفع این مشکل کد رجکس بالا را اصلاح می کنیم تا برای سایر زبانها نیز کاربرد داشته باشد. برای این منظور در آخر عبارت مقدار u برای تعریف رشته UTF-8 و مقدار pL نیز برای معرفی کاراکترهای سایر بکار گرفته می شود. البته این امر بنوعی مرتبط با یونیکدهاست. کد اصلاح شده:

echo preg_replace('/#(\pL+)/ui', '<a href="#">#$1</a>', 'متن #فارسی برای تست'); // out = متن #فارسی برای تست

صفحات پیشنهادی

سیستم لاگین فقط با استفاده از کوکی(PHP Script that uses Cookie for login)...

با استفاده از کد زیر که به همراه کدهای HTML قرار داده شده به راحتی می توانید بدون استفاده از نشستها یا سشن سیستم ورود به سیستم ایجاد نمایید......

تبدیل عدد ده دهی به باینری یا دودویی(Decimal to Binary)...

کد زیر عدد دسیمال یا ده دهی را به دودویی یا باینری تبدیل می کند. $i = 0; $s = 0; $n = 17; //input while ($n > 0) { $m = (int)($n / 2); $r = $n - $m * 2; $s = $s + $r * pow(10, $i...

گرفتن متن بین تگهای HTML...

با استفاده از کد زیر می توانید متن بین یک تگ خاص را بگیرید: $str = 'this is a <strong>text</strong>.<a>hello</a> world...'; $tagname = 'a'; preg_match("/<$tagname>(....

بدست آوردن ساعت، دقیقه و ثانیه از اختلاف دو زمان به فرمت یونیکس...

فرض کنید که میخواهید اختلاف دو زمان را به ساعت، دقیقه و ثانیه بدست آورید......

7 نظر

gravatar  mym
۴ سال پیش - بررسی شده - نوشته شده توسط مهمان

سلام .
من از تابع
preg_match_all
استفاده میکنم برای جست و جو این مشکل با راهکار شما حل نشد .
صفحه هم utf-8 ست شده .
مشکل از کجاست ؟

admin
۴ سال پیش - نوشته شده توسط مدیر

سلام
احتمالا مشکل مربوط به میشه به یونیکد خود فایل. یعنی یونیکد خود فایل هم علاوه بر صفحه باید utf-8 ست شده باشه. برای راهنمایی بهتر لطفا کدتون رو در این قسمت بگذارید و دوباره مشکلتون رو مطرح کنید.
صفحه: http://vtwo.org/Q2A/

gravatar  ali
۳ سال پیش - بررسی شده - نوشته شده توسط مهمان

سلام خسته نباشید ، مشکل من دقیقا اونجایی که وقتی همین خط کد رو اجرا میگیرم یه "فاصله" اضافه تو میاد داخل لینک هشتگ داخل متن و نمیدونم چجوری رفعش کنم

admin
۳ سال پیش - نوشته شده توسط مدیر

سلام. لطفا مشکلتون رو در این بخش بطور کامل مطرح کنید.
http://vtwo.org/Q2A/

gravatar  javad madani
۱ سال پیش - بررسی شده - نوشته شده توسط مهمان

این کتابخونه هم برای حروف فارسی هست
https://github.com/hosseinmousavi/Regex.Persian.Language

gravatar  عرفان زیده سرایی
۱ سال پیش - بررسی شده - نوشته شده توسط مهمان

دوست عزیز تو مثال اول عبارت si/ به چه معنی استفاده شده؟ ظاهراً معنی خاصی نمیده!.

admin
۱ سال پیش - نوشته شده توسط مدیر

سلام
مقدار i برای case insensitive
مقدار s هم برای در نظر گرفتن مقادیر مثل خط جدید یا تب ها اضافه شده البته برای بررسی بهتر این صفحه رو ببینید:
https://stackoverflow.com/questions/5959825/php-regular-expression

captcha image reload