آموزش کامل preg_replace_callback در PHP مثالهای کاربردی از Regex
تابع
برای اطلاعات بیشتر در مورد
ساختار تابع
پارامترهای ضروری:
1.
2.
3.
پارامترهای اختیاری:
4.
5.
6.
آموزش Regex (عبارات منظم)
۱. مبانی اولیه Regex
-
-
-
-
-
-
-
-
-
-
۲. گروهبندی و کپچر
-
-
-
۳. کلاس کاراکتر
-
-
-
مثالهای کاربردی با preg_replace_callback
مثال ۱: تبدیل اعداد به معادل حروفی
مثال ۲: افزایش اعداد در متن
مثال ۳: رمزنگاری ایمیلها
نکات پیشرفته
۱. استفاده از Closure (توابع بینام)
۲. پردازش چند الگو با یک callback
بهترین روشهای استفاده (Best Practices)
1. اعتبارسنجی الگوها: همیشه الگوهای
2. خطاگیری: از
3. کارایی: برای متنهای بزرگ، الگوهای پیچیده ممکن است عملکرد را کاهش دهند
4. خوانایی: برای الگوهای پیچیده از modifier
نتیجهگیری
برای تمرین بیشتر میتوانید:
- سیستم تبدیل تاریخ بین فرمتهای مختلف را پیادهسازی کنید
- یک هایلایتر سینتکس ساده ایجاد کنید
- سیستم مستر کردن خودکار اطلاعات حساس را توسعه دهید
این مقاله به شما کمک میکند تا:
- درک عمیقتری از
- الگوهای
- پردازش متنهای پیچیده را مدیریت کنید
- کدهای امنتر و کارآمدتر بنویسید
,
preg_replace_callback یکی از قدرتمندترین ابزارهای PHP برای انجام جایگزینیهای پیچیده بر اساس الگوهای Regex است. برخلاف preg_replace ساده که فقط جایگزینی ثابت انجام میدهد، این تابع امکان پردازش هوشمندانه و پویا را فراهم میکند.
برای اطلاعات بیشتر در مورد
Regex مقاله: آموزش جامع عبارات باقاعده (Regex) در PHP - از مقدماتی تا پیشرفته را هم مطالعه کنید.
ساختار تابع
preg_replace_callback(
string|array $pattern,
callable $callback,
string|array $subject,
int $limit = -1,
int &$count = null,
int $flags = 0
): string|array|null
پارامترهای ضروری:
1. $pattern: الگوی Regex (میتواند رشته یا آرایه باشد)
2.
$callback: تابع callback که پردازش را انجام میدهد
3.
$subject: متن ورودی برای پردازش
پارامترهای اختیاری:
4. $limit: حداکثر تعداد جایگزینی (پیشفرض: -1 یعنی نامحدود)
5.
$count: تعداد جایگزینیهای انجام شده (با reference ارسال میشود)
6.
$flags: Flagهای اختیاری مانند PREG_OFFSET_CAPTURE
آموزش Regex (عبارات منظم)
۱. مبانی اولیه Regex
- \d: هر رقم (معادل [0-9])
-
\w: هر حرف، رقم یا زیرخط (معادل [a-zA-Z0-9_])
-
\s: هر فاصله سفید (Space, Tab, Newline)
-
.: هر کاراکتر به جز خط جدید
-
*: ۰ یا بیشتر تکرار
-
: ۱ یا بیشتر تکرار
-
?: ۰ یا ۱ تکرار
-
{n}: دقیقاً n تکرار
-
{n,}: حداقل n تکرار
-
{n,m}: بین n تا m تکرار
۲. گروهبندی و کپچر
- (pattern): گروهبندی و کپچر
-
(?:pattern): گروهبندی بدون کپچر
-
(?<name>pattern): کپچر با نام
۳. کلاس کاراکتر
- [abc]: هر یک از a، b یا c
-
[^abc]: هر چیزی به جز a، b یا c
-
[a-z]: هر حرف کوچک a تا z
مثالهای کاربردی با preg_replace_callback
مثال ۱: تبدیل اعداد به معادل حروفی
/**
* Converts numbers to their word equivalents
*
* @param array $matches Array of matches from preg_replace_callback
* @return string The replaced text
*/
function numberToWords ( array $matches ): string {
$numberMap = [
0 => 'صفر', 1 => 'یک', 2 => 'دو',
3 => 'سه', 4 => 'چهار', 5 => 'پنج'
];
return $numberMap[$matches[1]] ?? $matches[0];
}
$text = "من 3 سیب و 5 پرتقال دارم";
$result = preg_replace_callback (
'/\b(\d)\b/',
'numberToWords',
$text
);
// نتیجه: "من سه سیب و پنج پرتقال دارم"
مثال ۲: افزایش اعداد در متن
/**
* Increments all numbers found in text
*
* @param array $matches Array of matches
* @return string Incremented number
*/
function incrementNumbers ( array $matches ): string {
return $matches[1] 1;
}
$text = "نسخه 1.2.3 منتشر شد";
$result = preg_replace_callback (
'/(\d )/',
'incrementNumbers',
$text
);
// نتیجه: "نسخه 2.3.4 منتشر شد"
مثال ۳: رمزنگاری ایمیلها
/**
* Obfuscates email addresses for privacy
*
* @param array $matches Matched email pattern
* @return string Obfuscated email
*/
function obfuscateEmail ( array $matches ): string {
$parts = explode ( '@', $matches[0] );
$username = substr ( $parts[0], 0, 2 ) . '...';
return $username . '@' . $parts[1];
}
$text = "Contact us at info@example.com or support@domain.com";
$result = preg_replace_callback (
'/[a-zA-Z0-9._% -] @[a-zA-Z0-9.-] \.[a-zA-Z]{2,}/',
'obfuscateEmail',
$text
);
// Result: "Contact us at in...@example.com or su...@domain.com"
نکات پیشرفته
۱. استفاده از Closure (توابع بینام)
$text = "Temperature is 25C and 30C";
$result = preg_replace_callback (
'/(\d )C/',
function ( $matches ) {
return ( $matches[1] * 9/5 ) 32 . 'F';
},
$text
);
// Result: "Temperature is 77F and 86F"
۲. پردازش چند الگو با یک callback
$patterns = [
'/\b\d{4}\b/', // 4-digit numbers
'/\b[A-Z]{3}\b/' // 3-letter uppercase codes
];
$text = "Order 1234 with code ABC and 5678 with XYZ";
$result = preg_replace_callback (
$patterns,
function ( $matches ) {
return str_repeat ( '*', strlen($matches[0] ) );
},
$text
);
// Result: "Order with code * and with *"
بهترین روشهای استفاده (Best Practices)
1. اعتبارسنجی الگوها: همیشه الگوهای Regex را قبل از استفاده در تولید تست کنید
2. خطاگیری: از
preg_last_error() برای تشخیص خطاها استفاده کنید
3. کارایی: برای متنهای بزرگ، الگوهای پیچیده ممکن است عملکرد را کاهش دهند
4. خوانایی: برای الگوهای پیچیده از modifier
x استفاده کنید تا بتوانید توضیحات اضافه کنید
$pattern = '/
\b # Word boundary
(\d{2,4}) # 2 to 4 digits (year)
\/ # Separator
(\d{1,2}) # 1-2 digits (month)
\/ # Separator
(\d{1,2}) # 1-2 digits (day)
\b # Word boundary
/x';
نتیجهگیری
preg_replace_callback ابزار فوقالعادهای برای انجام جایگزینیهای پیچیده و پویا در PHP است. با یادگیری اصولی Regex و ترکیب آن با این تابع، میتوانید پردازش متنهای پیچیده را به سادگی انجام دهید.
برای تمرین بیشتر میتوانید:
- سیستم تبدیل تاریخ بین فرمتهای مختلف را پیادهسازی کنید
- یک هایلایتر سینتکس ساده ایجاد کنید
- سیستم مستر کردن خودکار اطلاعات حساس را توسعه دهید
این مقاله به شما کمک میکند تا:
- درک عمیقتری از
preg_replace_callback داشته باشید
- الگوهای
Regex را مانند حرفهایها بنویسید
- پردازش متنهای پیچیده را مدیریت کنید
- کدهای امنتر و کارآمدتر بنویسید
,
نظرات