تستکننده Regex
عبارتهای باقاعده را زنده تست کنید: تطبیقها، گروههای capture و جایگزینی، همراه با ۱۵ الگوی آماده.
آزمایشگر Regex — تست آنلاین عبارتهای باقاعده با نمایش زنده تطبیقها
نوشتن عبارت باقاعده تا وقتی نبینید چه چیزی را میگیرد، حدس و گمان است. این آزمایشگر رایگان Regex، الگوی شما را همانطور که تایپ میکنید روی متن نمونه خودتان اجرا میکند و هر تطبیق را برجسته نشان میدهد؛ در نتیجه خطا را در چند ثانیه پیدا میکنید، نه بعد از انتشار یک قانون اعتبارسنجی معیوب.
الگو را در یک کادر، پرچمها را در کادر بعدی و متن آزمایشی را پایین بچسبانید. تطبیقها بلافاصله بهروز میشوند و اگر الگو نامعتبر باشد همان لحظه اعلام میشود، نه اینکه بیسروصدا شکست بخورد.
آزمایشگر Regex واقعاً به چه درد میخورد
بیشتر خطاهای Regex عجیب و غریب نیستند. الگو یا بیش از حد میگیرد، یا کمتر از حد، یا فقط روی همان یک نمونهای که در ذهن داشتید کار میکند و روی نمونه دوم شکست میخورد. آزمایشگر آن رفتار نامرئی را قابل دیدن میکند: پنج ورودی واقعی، از جمله موارد دردسرساز، را بچسبانید و ببینید کدامها روشن میشوند. این سریعترین راه یادگیری این نحو هم هست، چون یک کاراکتر را عوض میکنید و بلافاصله نتیجهاش را میبینید.
روش استفاده از این آزمایشگر
- الگو را بدون اسلشهای دو طرف بنویسید، مثلاً
[a-z]+\d{2,4}. - پرچمهای لازم را در کادر مربوطه وارد کنید، مثلاً
giبرای جستجوی سراسری و بدون حساسیت به بزرگی حروف. - متن نمونه واقعی را در متن آزمایشی بچسبانید، از جمله موارد مرزی که انتظار دارید رد شوند.
- تطبیقهایی را که در متن برجسته شدهاند و زیر تطبیقها و گروهها فهرست میشوند بخوانید، الگو را اصلاح کنید و تکرار کنید تا فقط متن درست انتخاب شود.
- گروههای Capture را که همراه هر تطبیق نشان داده میشوند ببینید و در جایگزینی با یک جایگزین با
$1یا$<name>بنویسید؛ متن بازنویسیشده زیر نتیجه جایگزینی ظاهر میشود.
نمیدانید از کجا شروع کنید؟ منوی کتابخانهٔ الگوها یکی از ۱۵ الگوی رایج را همراه با پرچمهایش بارگذاری میکند؛ از آدرس ایمیل، URL، آدرس IPv4، UUID و رنگ هگز تا لینک Markdown، کلمه تکراری و فاصلههای اضافه در ابتدا یا انتهای خط. اگر کادر آزمایش خالی باشد یا هنوز نمونه قبلی را داشته باشد، یک متن نمونه هم همراه الگو میآید؛ اما اگر متن خودتان را چسبانده باشید، سر جایش میماند و الگو روی داده واقعی شما اجرا میشود. اینها را نقطه شروع بدانید، نه ابزار اعتبارسنجی: مثلاً الگوی ایمیل عمداً کاربردی است و هر آدرسی را که استاندارد مجاز میداند نمیپذیرد. راهنمای Regex برای ایمیل و راهنمای اعداد، تلفن و آدرس IP توضیح میدهند این الگوها کجا کم میآورند.
گروههای Capture و جستوجو و جایگزینی
بخشی از الگو را داخل پرانتز بگذارید تا گرفته شود؛ این ابزار هر گروه را کنار تطبیقش نشان میدهد — با شماره گروه 1، گروه 2 و همینطور جلوتر، بهعلاوه هر گروه نامدار به شکل (?<name>...). اینطور میتوانید سال، پیششماره یا پسوند فایل را از دل یک تطبیق بیرون بکشید، نه اینکه فقط مطمئن شوید تطبیق رخ داده. در کادر جایگزینی با چیزی بنویسید تا تطبیقها همانجا بازنویسی شوند: $1 گروه اول را میگذارد، $<name> یک گروه نامدار را، $& کل تطبیق را، و $$ یک علامت دلار واقعی را.
پرچمها و تأثیر آنها
| پرچم | اثر | چه زمانی لازم است |
|---|---|---|
g | همه تطبیقها را پیدا میکند، نه فقط اولی | جایگزینی یا شمارش همه موارد |
i | بزرگی و کوچکی حروف را نادیده میگیرد | ورودی کاربر، ایمیل، برچسبها |
m | ^ و $ در هر سطر عمل میکنند | کار سطر به سطر روی لاگ یا فهرست |
s | . با خط جدید هم تطبیق میکند | گرفتن بلوکی که چند سطر را میپوشاند |
u | حالت کامل یونیکد | ایموجی، حروف فارسی و خطهای غیرلاتین |
y | چسبان؛ فقط در موقعیت جاری تطبیق میدهد | نوشتن Tokenizer یا Parser |
نشانههایی که بیشتر از همه به کار میآیند
| نشانه | معنی |
|---|---|
\d \w \s | یک رقم، یک کاراکتر کلمه، یک فاصله سفید |
. | هر کاراکتری بهجز خط جدید، مگر آنکه پرچم s فعال باشد |
^ $ | ابتدا و انتهای رشته، یا با پرچم m ابتدا و انتهای هر سطر |
* + ? | صفر یا بیشتر، یک یا بیشتر، صفر یا یک |
{2,5} | بین دو تا پنج بار تکرار |
[abc] [^abc] | یکی از این کاراکترها، یا هر چیزی بهجز اینها |
(...) (?:...) | گروه ثبتشونده و گروه بدون ثبت |
\b | مرز کلمه؛ راهحل درست برای تطبیق فقط کلمات کامل |
مردم Regex را برای چه مینویسند
- اعتبارسنجی ایمیل، شماره تلفن، کد پستی و کد ملی در فرمها.
- استخراج آدرس IP، کد وضعیت، مهر زمانی یا شناسه کاربر از سطرهای لاگ.
- جستجو و جایگزینی در کل پروژه و بازنویسیهایی که ویرایشگر نمیتواند بهصورت عینی انجام دهد.
- قوانین مسیریابی و ریدایرکت در فریمورک، وبسرور یا CDN.
- پاکسازی دادههای واردشده یا استخراجشده پیش از رسیدن به پایگاه داده.
- اعمال قوانین ترکیب رمز عبور در سمت کاربر.
اشتباههایی که بیشترین وقت را میگیرند
- کمیتسنجهای حریص.
.*تا انتهای سطر پیش میرود. با.*?یا یک کلاس نفیشده مانند[^"]*زودتر متوقفش کنید. - کاراکترهای ویژه بدون Escape. نقطه، بهعلاوه، علامت سؤال یا اسلش واقعی باید Backslash داشته باشند.
- فراموش کردن پرچم
gو بعد تعجب از اینکه چرا فقط مورد اول عوض شد. - Backtracking فاجعهبار. کمیتسنجهای تودرتو مثل
(a+)+میتوانند روی ورودی طولانی بدون تطبیق، برنامه را قفل کنند. - الگوی بیش از حد سختگیر برای ایمیل. آدرسهای واقعی نقطه، علامت بهعلاوه و کاراکترهای بینالمللی دارند؛ ساده بگیرید و با ارسال ایمیل تأیید کنید.
- تلاش برای تجزیه HTML. برای ساختارهای تودرتو از Parser استفاده کنید؛ Regex نمیتواند تگهای باز و بسته را بشمارد.
نکتهای درباره گویشهای Regex
این آزمایشگر از موتور JavaScript مرورگر شما استفاده میکند و اگر قرار است الگو در یک صفحه وب، در Node.js یا در یک JSON Schema اجرا شود همین هدف درست است. PCRE، پایتون، Go و PostgreSQL در جزئیاتی مثل پشتیبانی از Lookbehind، نحو گروههای نامدار و ویژگیهای یونیکد تفاوت دارند. پیش از اتکا به یک الگو، آن را در همان محیطی که واقعاً اجرا میشود آزمایش کنید.
هیچچیزی که میچسبانید فرستاده نمیشود
الگو و متن نمونه شما در مرورگر میمانند. این موضوع مهم است چون داده آزمایشی معمولاً داده واقعی است — تکهای از لاگ، رکورد مشتری، نمونه ایمیل — و هیچکدام نباید روی سرور شخص دیگری بنشیند.
همان الگو در پایتون، جاوا، C#، PHP و Go
الگویی که اینجا کار میکند معمولاً با تغییر فقط پوسته به زبان دیگر منتقل میشود. چیزی که واقعاً دردسر میسازد، نحوه escape شدن بکاسلش در رشتهها و امکاناتی است که هر موتور دارد.
| زبان | بررسی تطبیق | مراقب باشید |
|---|---|---|
| Python | re.search(r'\d{4}', text) | از رشته خام استفاده کنید؛ گروه نامدار به شکل (?P<name>...) نوشته میشود |
| Java | Pattern.compile("\\d{4}").matcher(text).find() | بکاسلشها را دوتایی کنید؛ matches() تطبیق کل رشته را میخواهد |
| C# / .NET | Regex.IsMatch(text, @"\d{4}") | رشتههای verbatim با @ از escape دوباره جلوگیری میکنند |
| PHP | preg_match('/\d{4}/', $text) | PCRE: جداکننده اجباری است، برای UTF-8 پرچم u اضافه کنید |
| Go | regexp.MustCompile(`\d{4}`).MatchString(text) | موتور RE2: بدون lookbehind و بدون ارجاع به عقب |
ابزارهای مرتبط
الگوها تقریباً همیشه روی متنی کار میکنند که از جای دیگری آمده است. داده را با فرمتکننده JSON مرتب کنید، مقدار Escapeشده را با رمزگشای URL باز کنید، توکن را با رمزگشای JWT بخوانید و مقدارهای زمانی پیداشده را با مبدل تایماستمپ به تاریخ تبدیل کنید.