عبارت منظم توضیح میدهد چه متنی را باید پیدا کرد. بهجای یک عبارت دقیق، الگو تعیین میکنید؛ برای مثال واژهٔ «درخواست» و هر شمارهای که پس از آن بیاید. شماره ممکن است در هر پیام تغییر کند، اما الگو همچنان بخش موردنظر را پیدا میکند.
به این روش میتوانید تاریخ، لینک، واژههای جداگانه، خطهای کامل و تقریباً هر ترکیب متنی را جستجو کنید که بتوان با قاعده توضیحش داد. چند نماد ساده امکان در نظر گرفتن مقدارهای متغیر، انتخاب از میان گزینهها و گذشتن از موارد اضافی را میدهند. قابلیتهای این نوع جستجو بسیار فراتر از جستجوی معمولی یک واژه است.

قابلیتهای عبارتهای منظم
پشتیبانی از عبارتهای منظم در فیلترها و جایگزینیهای FLOWIN این امکانها را فراهم میکند:
- افزودن هر متنی به ابتدا یا انتهای پیامها.
- فیلتر کردن پیامهای دارای لینک.
- حذف لینک، تلفن، ایمیل و دیگر اطلاعات تماس از پیامهای کپیشده.
- فیلتر کردن پیامهای بلند یا برعکس، فقط پیامهای کوتاه.
حالت «Regexp»
در تنظیمات فیلتر یا جایگزینی، حالت «Regexp» کنار فیلد «جستجو»، جستجو با عبارت منظم را فعال میکند. خود الگو در همین فیلد تعیین میشود. ایجاد قاعده و اعمال آن روی انتقال، در راهنماهای فیلترها و جایگزینیها توضیح داده شده است.

چگونه عبارت منظم را بخوانیم
با الگوی درخواست №\d+ شروع میکنیم. این الگو هم درخواست №125 و هم درخواست №8072 را پیدا میکند، هرچند شمارهها متفاوتاند. آن را از چپ به راست میخوانیم:
درخواست №دقیقاً همین حروف، فاصله و علامت شماره را جستجو میکند.\dهر رقمی از 0 تا 9 را نشان میدهد.+یک یا چند مورد از این رقمها را پشت سر هم الزامی میکند.
بخش پیداشده را تطبیق مینامند. در پیام درخواست №125 پذیرفته شد تطبیق، درخواست №125 است و عبارت پذیرفته شد بیرون از آن باقی میماند. در فیلتر، تطبیق به تشخیص اینکه پیام شرط را دارد یا نه کمک میکند؛ در جایگزینی، مشخص میکند کدام بخش تغییر کند.
حروف معمولی و فاصلهها در الگو، همانطور که نوشته شدهاند جستجو میشوند. نمادهای ویژه، قاعدهها را تعیین میکنند. در ادامه نمادهای اصلی را بررسی میکنیم و سپس مثالهای آماده برای کارهای مختلف آمدهاند.
نحو عبارتهای منظم
برای شروع استفاده از عبارتهای منظم، باید نحو آنها را بدانید؛ یعنی بفهمید نمادهای مشخص چه معنایی دارند.
نمادهای اصلی
^آغاز متن را نشان میدهد.$پایان متن را نشان میدهد..با هر نویسهای، از جمله شکست خط، مطابقت دارد.\dبا رقمی از 0 تا 9 مطابقت دارد.\wبا حرف لاتین، رقم یا زیرخط مطابقت دارد.\nشکست خط را نشان میدهد.\tتب را نشان میدهد.\sبا فاصلهٔ معمولی، تب، شکست خط، بازگشت به ابتدای خط یا شکست صفحه مطابقت دارد.\bمرز واژه را بررسی میکند؛ برای مثال میان حرف و فاصله. خود نویسهای به تطبیق اضافه نمیکند.
نمادهای تعداد
نمادهای تعداد مشخص میکنند نویسه یا گروه پیش از آنها چند بار تکرار شود. گروه، چند نویسه را درون پرانتز گرد کنار هم قرار میدهد.
*به معنای 0 بار یا بیشتر است.+به معنای 1 بار یا بیشتر است.?به معنای 0 یا 1 بار است.{5}به معنای دقیقاً 5 بار است.{1,5}به معنای 1 تا 5 بار است.{1,}به معنای 1 بار یا بیشتر است.{0,5}به معنای 0 تا 5 بار است.
برای مثال:
a+باa،aa،aaaو موارد بعدی مطابقت دارد..*با هر متنی، حتی متن خالی، مطابقت دارد.аб{3}باабббمطابقت دارد.
گروهها
پرانتزهای گرد ( ) نویسهها را در یک گروه قرار میدهند. گروهها بیشتر همراه با نمادهای تعداد یا خط عمودی | به کار میروند که به معنای «یای منطقی» است.
برای مثال:
((Bob)|(Alice))هم باBobو هم باAliceمطابقت دارد.(abc){3}باabcabcabcمطابقت دارد.
مجموعهٔ نویسهها
برای مشخص کردن مجموعهٔ نویسهها، از کروشههای [ ] استفاده میشود. درون آنها میتوان نویسهها را اینطور فهرست کرد:
[а-яё]با هر حرف الفبای روسی مطابقت دارد.[абвгд]یا[а-д]با یکی از حروفа،б،в،гیاдمطابقت دارد.[a-z]با هر حرف لاتین ازaتاzمطابقت دارد.[0-5]با هر رقمی از 0 تا 5 مطابقت دارد.
نماد ^ در ابتدای مجموعه به معنای «نفی منطقی» است:
[^а-яё]با هر نویسهای بهجز حرف الفبای روسی مطابقت دارد.[^a-z]با هر نویسهای بهجز حروف لاتین ازaتاzمطابقت دارد.[^\s]با هر نویسهای که جزو\sنباشد مطابقت دارد.
در FLOWIN، \w حروف سیریلیک را شامل نمیشود. [а-яё] الفبای روسی، از جمله ё، را پوشش میدهد. این حرف در بازهٔ [а-я] وجود ندارد.
گریز دادن نویسهها
اگر نویسهٔ ویژه را بهصورت متن معمولی بخواهید، نه بهعنوان بخشی از نحو، یک بکاسلش \ پیش از آن قرار میدهید. این کار گریز دادن نام دارد.
برای مثال:
:\)با:)مطابقت دارد. پرانتز در اینجا یک پرانتز معمولی است، نه گروه.кто\?باкто?مطابقت دارد. علامت سؤال در اینجا تعداد تکرار را تعیین نمیکند.
تنظیمات جستجو در FLOWIN
پرچمها قواعد کلی جستجو را تغییر میدهند؛ برای مثال اینکه بزرگی و کوچکی حروف در نظر گرفته شود یا نه. در FLOWIN، بخشی از تنظیمات از قبل فعال است؛ بنابراین یک الگوی یکسان ممکن است با تنظیمات پیشفرضِ یک ابزار آزمایش دیگر رفتار متفاوتی داشته باشد.
پرچمها از قبل تنظیم شدهاند
در فیلترها و جایگزینیها، IgnoreCase (i)، Singleline (s)، RE2 و Unicode فعالاند. لازم نیست آنها را دستی به هر الگو اضافه کنید. نکتههای مهم در عمل:
iتفاوت بزرگی و کوچکی حروف را نادیده میگیرد:котهمКотو همКОТرا پیدا میکند.sبه نقطهٔ.اجازه میدهد شکست خط را پیدا کند. بنابراین.*میتواند چند خط را یکجا بگیرد.- حالت چندخطی
Multiline (m)بهصورت پیشفرض خاموش است:^و$به آغاز و پایان کل پیام مربوطاند، نه هر خط. RE2ویژگیهای نحو را تعیین میکند:\dرقمهای 0–9 را جستجو میکند و\wفقط حروف لاتین، رقمها و زیرخط را. فعال بودنUnicodeحروف سیریلیک را به\wاضافه نمیکند.
برای مثالهای آمادهٔ زیر، نیازی به تغییر هیچ گزینهای نیست. اگر آنها را در سرویس دیگری امتحان میکنید، این تنظیمات را در نظر بگیرید: یکسان بودن نام پرچمها، رفتار یکسان موتورهای مختلف را تضمین نمیکند.
الگوهای آماده
کار موردنظر را انتخاب کنید و الگو را در فیلد «جستجو» با حالت «Regexp» کپی کنید. مثالها دقیقاً متن پیداشده را نشان میدهند. اینکه سپس چه اتفاقی برای پیام میافتد، به فیلتر یا جایگزینی تنظیمشده بستگی دارد.
شمارهٔ درخواستی که هر بار تغییر میکند
یافتن درخواست بدون دانستن شمارهٔ آن از قبل.
الگو:درخواست №\d+
متن: درخواست №125 پذیرفته شد. درخواست №8072 منتظر پاسخ است.
پیدا میکند: درخواست №125، درخواست №8072.
متن «درخواست №» ثابت میماند و \d+ یک یا چند رقم پشت سر هم را پیدا میکند. فاصلهٔ پیش از № هم بخشی از الگوست. «درخواست №ABC» مناسب نیست.
پیامی که فقط شش رقم دارد
انتخاب پیامهایی که دقیقاً کدی ششرقمی دارند.
الگو:^\d{6}$
متن: 482901
پیدا میکند: 482901.
آغاز و پایان، کل پیام را محدود میکنند و {6} شش رقم را تعیین میکند. «کد: 482901»، «48290» و «482901 » با فاصله در انتها مناسب نیستند.
یکی از چند گزینهٔ متنی
یافتن پیامهایی که یکی از دو وضعیت در آنها آمده است.
الگو:готово|отменено
متن: Готово: файл отправлен. Другое задание отменено.
پیدا میکند: Готово، отменено.
خط عمودی به معنای «یا» است. بزرگی و کوچکی حروف اهمیتی ندارد. بدون مرز واژه، الگو «готово» را درون واژهٔ «готового» هم پیدا میکند.
واژهٔ کامل، بدون تطبیق درون واژههای دیگر
یافتن واژهٔ «кот» و گذشتن از «котёнок» و «скот».
الگو:\bкот\b
متن: Кот, котёнок и скот.
پیدا میکند: Кот.
\b در هر دو طرف، مرز واژه را بررسی میکند. فاصله و نشانههای سجاوندی میتوانند واژه را از متن مجاور جدا کنند؛ خودشان جزو تطبیق نیستند.
تاریخ با قالب روز.ماه.سال
یافتن تاریخی که روز و ماه آن دو رقم و سال آن چهار رقم دارد.
الگو:\d{2}\.\d{2}\.\d{4}
متن: جلسه در 16.10.2026 ساعت 12:00.
پیدا میکند: 16.10.2026.
\. به معنای نقطهٔ معمولی است، نه هر نویسهای. الگو شکل نوشتار را بررسی میکند، نه تقویم را: «99.99.2026» هم تطبیق مییابد.
هشتگها به روسی و انگلیسی
یافتن هشتگهای متشکل از حروف، رقمها و زیرخط.
الگو:#[а-яёa-z0-9_]+
متن: #Новости #release_2 #всё_готово
پیدا میکند: #Новости، #release_2، #всё_готово.
پس از # یک یا چند نویسه از مجموعه میآید. فاصله یا خط تیره، تطبیق را پایان میدهد: در «#план-дня» فقط «#план» پیدا میشود.
منشنهایی به شکل @username
یافتن متنی که شبیه منشن کاربر یا کانال است.
الگو:@[a-z0-9_]{3,}
متن: نویسنده: @news_room. یکی دیگر: @ab.
پیدا میکند: @news_room.
پس از @ دستکم سه حرف لاتین، رقم یا زیرخط لازم است. الگو شکل نوشتار را جستجو میکند، نه وجود کاربر را. همچنین ممکن است بخشی از نشانی ایمیل را هم پیدا کند.
لینکهای دارای http:// یا https://
یافتن نشانی وبی که با پروتکل بهصراحت نوشته شده است.
الگو:https?:\/\/[^\s]+
متن: نشانیهای https://example.org/page و http://example.org را باز کنید
پیدا میکند: https://example.org/page، http://example.org.
حرف s اختیاری است. پس از //، الگو نویسهها را تا نزدیکترین فاصله یا جداکنندهٔ دیگر از \s میگیرد. نشانی بدون پروتکل مناسب نیست و ویرگول یا نقطهٔ چسبیده به نشانی ممکن است جزو تطبیق شود.
شماره تلفن به شکل +7 و ده رقم
یافتن شمارهای که یکسره و بدون پرانتز، فاصله و خط تیره نوشته شده است.
الگو:\+7\d{10}
متن: تماس: +79991234567
پیدا میکند: +79991234567.
\+ علامت جمع معمولی را جستجو میکند و \d{10} دقیقاً ده رقم پس از 7 را تعیین میکند. «+7 (999) 123-45-67» تطبیق نمییابد. این جستجو بر اساس شکل نوشتار است و وجود شماره را بررسی نمیکند؛ درون زنجیرهٔ بلندتری از رقمها هم ممکن است تطبیق رخ دهد.
پیامهایی که با برچسب موردنظر آغاز میشوند
یافتن برچسب «Важно:» فقط در ابتدای خود پیام.
الگو:^Важно:
متن: ВАЖНО: встреча перенесена.
پیدا میکند: ВАЖНО:.
^ آغاز کل متن را بررسی میکند. در «Обновление: Важно: встреча перенесена» تطبیقی رخ نمیدهد. این برچسب در ابتدای خط دوم هم مناسب نیست، چون حالت چندخطی بهصورت پیشفرض خاموش است.
فاصلههای اضافی میان واژهها
یافتن دو یا چند فاصلهٔ معمولی پشت سر هم، برای جایگزینی آنها با یک فاصله.
الگو:[ ]{2,}
در متن متن··با···فاصلهها دو گروه پیدا میشوند: دو و سه فاصله. نماد · در اینجا فقط فاصلهٔ معمولی را نشان میدهد؛ لازم نیست آن را وارد کنید.
درون کروشه، فاصلهٔ معمولی قرار دارد و {2,} دستکم دو فاصلهٔ پشت سر هم را الزامی میکند. برای حذف فاصلههای اضافی، بخشهای پیداشده را با یک فاصله جایگزین میکنند. این الگو بر شکست خطها تأثیری ندارد.
پیامهای کوتاه تا صد نویسه
انتخاب پیامهای غیرخالی با طول 1 تا 100 نویسه.
الگو:^.{1,100}$
متن: پیام کوتاه
پیدا میکند: پیام کوتاه.
نقطه همهٔ نویسهها، از جمله فاصلهها و شکست خطها، را میشمارد. آکولادها حدود را تعیین میکنند و ^ و $ بررسی کل پیام را الزامی میکنند. پیام خالی و متن طولانیتر از 100 نویسه مناسب نیستند. ایموجی ترکیبی ممکن است چند نویسه شمرده شود.
فهرست بهمرور کاملتر میشود. پیشنهاد الگوهای جدید را میتوانید برای پشتیبانی بفرستید: @value_maker.
آزمایش الگوی خودتان
در regex101.com میتوانید عبارتهای منظم خود را بهراحتی امتحان کنید. تنظیمات جستجو در آن ممکن است با FLOWIN متفاوت باشد؛ بنابراین پیش از اعمال روی انتقال کاری، باید روی پیامهای آزمایشی بررسی کنید: هم با تطبیق موردانتظار و هم بدون آن.
پرسشهای متداول
چه زمانی «متن» یا «فهرست» کافی است و چه زمانی «Regexp» لازم است؟
حالت «متن» برای یک عبارت مشخص مناسب است و «فهرست» امکان فهرست کردن چند گزینه را میدهد. «Regexp» زمانی لازم است که متن بر اساس قاعده تغییر کند؛ برای مثال، هر بار پس از واژهٔ «درخواست»، شمارهٔ جدیدی بیاید. همچنین به تعیین مرز واژه یا تعداد نویسهها کمک میکند. عمل مربوط به پیام پیداشده، جداگانه در فیلتر یا جایگزینی تنظیم میشود.
چرا عبارتِ ابزار آزمایش آنلاین، در FLOWIN متفاوت کار میکند؟
نتیجه به موتور و تنظیمات جستجو بستگی دارد. در فیلترها و جایگزینیهای FLOWIN، IgnoreCase، Singleline، RE2 و Unicode از قبل فعالاند و Multiline بهصورت پیشفرض خاموش است. بنابراین بزرگی و کوچکی حروف در نظر گرفته نمیشود، نقطه میتواند شکست خط را پیدا کند و ^ و $ به کل پیام مربوطاند. تنظیمات جستجو را تطبیق دهید و عبارت را در FLOWIN، روی پیامهایی با تطبیق موردانتظار و بدون آن بررسی کنید.
چرا .* چند خط را میگیرد؟
در FLOWIN، Singleline فعال است: نقطه با شکست خط هم مطابقت دارد. بنابراین .* الزاماً در پایان خط اول متوقف نمیشود. اگر میخواهید متن را تا نزدیکترین شکست خط پیدا کنید، میتوانید از [^\r\n]+ استفاده کنید: این الگو یک یا چند نویسه را بهجز بازگشت به ابتدای خط و شکست خط جستجو میکند.
چرا \w حروف روسی را پیدا نمیکند؟
در تنظیمات جستجوی FLOWIN، \w حروف لاتین، رقمها و زیرخط را پوشش میدهد. برای حروف روسی از [а-яё] و برای دنبالهای از این حروف از [а-яё]+ استفاده کنید. حرف ё را باید جداگانه مشخص کنید: بازهٔ а-я آن را شامل نمیشود. نیازی به تشخیص بزرگی و کوچکی حروف نیست، چون جستجو از قبل به آن حساس نیست.
چگونه واژه را کامل و بدون بخشهای درون واژههای دیگر پیدا کنیم؟
نماد \b را در هر دو طرف واژه اضافه کنید. برای مثال، \bкот\b «Кот» را در متن «Кот, котёнок и скот» پیدا میکند، اما از دو واژهٔ دیگر میگذرد. مرزها جایگاه واژه را بررسی میکنند و فاصلهها و نشانههای سجاوندی جزو بخش پیداشده نیستند.
آیا الگوی تاریخ در مثال، وجود آن تاریخ را بررسی میکند؟
خیر. عبارت \d{2}\.\d{2}\.\d{4} فقط شکل نوشتار را بررسی میکند: دو رقم، نقطه، دو رقم، نقطه و چهار رقم. بنابراین هم 16.10.2026 و هم 99.99.2026 را پیدا میکند. این مثال برای یافتن بخشهای شبیه تاریخ مناسب است، اما درستی روز و ماه را تأیید نمیکند.
اگر عبارت منظم چیزی پیدا نکند، چه چیزی را بررسی کنیم؟
ابتدا مطمئن شوید کنار فیلد «جستجو»، «Regexp» انتخاب شده است. سپس الگو را با متن اصلی مقایسه کنید: فاصلهها، شکست خطها و نشانههای معمولی هم بر تطبیق تأثیر دارند. برای مثال، درخواست №\d+ فاصلهٔ پیش از № و رقمهای پس از آن را الزامی میکند؛ بنابراین درخواست№125 یا درخواست №ABC را پیدا نمیکند. مرزهای ^ و $ را هم بررسی کنید: بهصورت پیشفرض به کل پیام مربوطاند. از بخشی ساده شروع کنید و شرطها را یکییکی اضافه کنید و هر بار نتیجه را بررسی کنید.