عبارات منظم (RegEx)

کار با عبارات منظم در PHP — preg_match، preg_replace، preg_split و الگوهای پرکاربرد

عبارت منظم (RegEx) چیست؟

عبارت منظم (Regular Expression) یک زبان کوچک برای جستجو و تطبیق الگو در متن است. با RegEx می‌توانید بررسی کنید که آیا یک متن الگوی خاصی دارد یا نه.

توابع RegEx در PHP

تابعتوضیح
preg_match()بررسی تطابق (اولین مورد)
preg_match_all()پیدا کردن همه تطابق‌ها
preg_replace()جایگزینی با الگو
preg_split()تقسیم متن با الگو

ساختار الگو

الگوها بین / قرار می‌گیرند:

/الگو/پرچم‌ها

کاراکترهای خاص

کاراکترتوضیحمثال
.هر کاراکتر/h.llo/ → hello
\dعدد (0-9)/\d+/ → 123
\Dغیر عدد—
\wحرف، عدد یا _—
\Wغیر حرف—
\sفاصله (space, tab)—
\Sغیر فاصله—
^شروع رشته/^Hello/
$پایان رشته/world$/

کمیت‌سنج‌ها (Quantifiers)

کمیتتوضیحمثال
*صفر یا بیشتر/a*/
+یک یا بیشتر/a+/
?صفر یا یک/a?/
{n}دقیقاً n تا/a{3}/ → aaa
{n,}حداقل n تا/a{2,}/
{n,m}بین n و m/a{2,4}/

preg_match — بررسی تطابق

<?php
$email = "user@example.com";

if (preg_match("/^[^@]+@[^@]+\.[^@]+$/", $email)) {
    echo "ایمیل معتبر است!";
}

// گرفتن مقدار تطبیق‌یافته
preg_match("/(\d+)/", "من 25 سال دارم", $matches);
echo $matches[0];  // 25
echo $matches[1];  // 25 (گروه اول)
?>

preg_match_all — همه تطابق‌ها

<?php
$text = "تلفن‌ها: 02112345678 و 02187654321";

preg_match_all("/\d{11}/", $text, $matches);
print_r($matches[0]);
// ["02112345678", "02187654321"]
?>

preg_replace — جایگزینی

<?php
// حذف فاصله‌های اضافی
$text = "سلام   دنیا";
$clean = preg_replace("/\s+/", " ", $text);
// "سلام دنیا"

// پنهان کردن شماره کارت
$card = "1234-5678-9012-3456";
$masked = preg_replace("/\d{4}(?=-\d{4})/", "****", $card);
// ****-****-****-3456
?>

پرچم‌ها (Flags)

پرچمتوضیح
iبدون حساسیت به حروف بزرگ/کوچک
mچندخطی (^ و $ برای هر خط)
uپشتیبانی از UTF-8 (برای فارسی)

الگوهای پرکاربرد

// ایمیل
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/

// شماره موبایل ایران
/^09\d{9}$/

// کد پستی ایران
/^\d{10}$/

// URL
/^https?:\/\/.+$/

// فقط حروف فارسی
/^[\x{0600}-\x{06FF}\s]+$/u
?>

این مبحث بخشی از دوره آموزش کامل PHP است.

ابزارهای مرتبط