تعریف کاراکترهای غیر زبان انگلیسی در عبارات منظم (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...

بهترین حالت برای از بین بردن اطلاعات ذخیره شده در سشن و خروج از سیستم کد زیر می باشد که به پیشنهاد خود برنامه کمک زبان php می باشد......

گرفتن محتوای یک آدرس اینترنتی در PHP...

گاهی لازم است محتوای یک صفحه وب را بگیریم. در PHP توابع بسیاری برای این منظور وجود دارد اما تابع stream_get_contents بر اساس تجربه ما سرعت بیشتری دارد. مزیت این تابع کنترل دریافت مقدار بر اساس با...

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

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

گرفتن متن بین تگهای 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