اگر در حوزه برنامهنویسی یا سئو فعالیت میکنید، احتمالا رجکس یک نام آشنا برای شما است. به مجموعه عبارتهای با قاعده یا عبارت های منظم Regex گفته میشود. در این مقاله به صورت تصویری و با طرح مثال، به سوال Regex چیست پاسخ میدهیم.
در این مقاله علاوه بر اینکه نکات مهم درباره رجکس را مطرح میکنیم، به مزایا و کاربردهای عملی رجکس در سئو و به طور کلی جمعآوری اطلاعات مفید، میپردازیم. شما در این آموزش با مفهوم رجکس چیست و روش نوشتن رجکسی آشنا میشوید. با طرح چندین مثال و آموزش تصویری، به شما در درک موضوع کمک میکنیم. مراحل آموزش را بخوانید و از اولین مرحله آموزش نوشتن عبارات با قاعده منظم یا regular expressions شروع کنید.
ریجکس Regex چیست؟
رجکس (ریجکس) regex یا Regular Expressions به معنای عبارات با قاعده و منظم است. ریجکس در گوگل آنالیتیکس و سرچ کنسول کاربرد دارد اما، چطور میتوان از این عبارتهای منظم در ابزارهای گوگل استفاده کرد؟ با استفاده از کاراکترهای خاص و علائم، به راحتی میتوانید اطلاعات مورد نیاز خود را استخراج کنید. در نهایت با کسب اطلاعات مفید، به تجزیه و تحلیل عملکرد وبسایت بپردازید. به بیان دیگر، با این روش، الگوهای جستجو خاص را طراحی میکنیم. اگر روش ریجکس نویسی را به خوبی یاد بگیرید، میتوانید به راحتی در هر ابزاری که امکان دریافت کوئری دارید، اطلاعات با ارزشی را جمع آوری کنید.
در سایت ریجکس 101 میتوانید به صورت آنلاین و لایو این موارد را تست و تمرین بفرمایید.
Regex is a sequence of characters that defines a pattern to search for in text. You can use it to search for specific characters, words, or patterns in a text file, database, or web page. For example, you could use regular expressions to extract all email addresses from a text file, or to find and replace all instances of a misspelled word in a document
کسانی که برای آموزش ریجکس اینجا هستند، احتمالا با بسیاری از ابزارهای سئو و سئو محتوا کار کردند. بر همین اساس، میتوان گفت که یادگیری ریجکس، شما را به مرحلهی بالاتری در تجزیه و تحلیل سوق میدهد. تصور کنید، برای تقویت برندینگ به یک مسیر فکری نیاز دارید. شما باید یک چشمانداز درست از عملکرد کنونی سایت خود از نظر برندینگ داشته باشید؛ بنابراین، برای هر گونه ارزیابی و تجزیه و تحلیل به سری اطلاعات سودمند و باارزش نیاز دارید. اینجاست که باید با نوشتن RegEx، کوئری طراحی کنید.
-
تمپلیت سئو برای پروژه230,000 تومان – 1,250,000 تومان
-
KPI پلن سئو برای ۱۲ ماه350,000 تومان – 2,500,000 تومان
-
بریف محتوای متنی280,000 تومان – 1,250,000 تومان
-
تقویم مناسبتهای ۱۴۰۳250,000 تومان – 1,500,000 تومان
مزیت های Regex
رجکس مانند هر قابلیت دیگری، مزیت هایی دارد. در این بخش لیستی از مزیت های Regex را نام بردیم:
- سادگی دستورات
- کاربردی در تحلیل دادهها
- صرفه جویی در زمان ( چرا که دیگر لازم نیست مدت زمان طولانی را برای بررسی تمام دادهها صرف کنید.)
- یک خط Regex جایگزین 100 خط کدنویسی
- روشی ساده برای Trim و Concatenation
- امکان انجام عمل Parse در شرایط سخت
معایب Regex
برای پاسخ به پرسش Regex چیست ، شناخت مزایا و معایب Regex است. در بالا مزایای را نام بردیم و در این بخش معایب Regex را بیان میکنیم:
- تنبل شدن ذهن برنامه نویس
- وابستگی برنامه نویس
- غیر قابل توسعه
- باید تمام دستورات Regex را بشناسید
کاربرد Regular Expression یا Regex چیست؟
ریجکس در سرچ کنسول و آنالیتیکس کاربرد بسیاری دارد. این دو ابزار دنیایی از اطلاعات هستند، اما اینکه شما چطور و با چه الگویی این اطلاعات را جمع آوری می کنید، به آموزهها و البته تجربه کار با عبارات با قاعده regex بستگی دارد. در قدم اول باید بدانید که کجای ابزار آنالیتیکس و سرچ کنسول امکان نوشتن عبارات با قاعده و منظم Regex را به شما میدهد؟
ریجکس چند کاربرد کلی دارد:
- جستجو عبارتها
- جستجو و جایگزینی عبارتها
- استخراج اطلاعات با ارزش
کاربرد عبارات با قاعده ریجکس در سرچ کنسول
کاربرد ریجکس Regex در سرچ کنسول چیست؟ و چطور میتوان از عبارات منظم در بهبود سایت کمک گرفت؟ در این بخش به طور کامل به این پرسشها پاسخ میدهیم. استفاده از regular expressions به شما کمک می کند تا وضعیت سایت و صفحات را از جنبههای مختلف ارزیابی کنید. ممکن است بخواهید تمام سرچهای ورودی را با کلمه یا عبارت خاصی ارزیابی کنید و یا اینکه ورودی سایت را با یک صفحه مورد بررسی قرار بدهید؛ در هر حال، Search Console این امکان را به شما میدهد.
در این بخش، Regex سرچ کنسول را آموزش میدهیم. پس بدون هیچ نگرانی با ما پیش بروید.
- وارد سرچ کنسول شوید: شما باید یک پروژه روی سرچ کنسول تعریف کرده باشید تا به سرچ کنسول دسترسی داشته باشید.
- در کادر سمت چپ روی Performance کلیک کنید تا پنجره آن باز شود.
- در پنجرهای که مشاهده می کنید، در قسمت بالا روی new+ کلیک کنید.
- یک نوار باز میشود.
- در نوار باز شده روی گزینه Query کلیک کنید.
- حالا باید با توجه به فیلتر انتخاب کنید که تصمیم به ساخت چه نوع کوئری دارید؟
- در بخش FILTER روی یک لیست کشویی مشاهده میکنید که عبارت query containing را نوشته است.
- لیست کشویی را باز کنید و سپس گزینه custom regex را انتخاب کنید.
- یک کادر برای شما باز میشود که میتوانید کوئری خود را بنویسید.
کاربرد عبارات با قاعده ریجکس در آنالیتیکس
از عبارات با قاعده یا همان ریجکس در آنالیتیکس مانند سرچ کنسول یا وب مستر، برای گزارش گیری استفاده میکنیم. آنالیتیکس مهمترین ابزار گوگل است که هر نوع اطلاعاتی را به شما ارائه میدهد. روش استفاده از اطلاعات یک هنر است. شما با استفاده از کدها و دستورات ریجکسی، میتوانید اطلاعات مفیدی را بدست آورید. در واقع این دستورات در Google Analytics به شما کمک میکند تا با دید واقعی وبسایت خود را ارزیابی کنید. هر قدر اطلاعات شما دقیقتر و درستتر باشد، طراحی و پیادهسازی استراتژیها راحتتر و قابل پیشبینیتر خواهد شد.
انواع ریجکس regex (عبارات با قاعده منظم)
حالا وقت آن رسیده تا کوئری زدن را یاد بگیرید. این قاعده و اصولی است که برای نوشتن ریجکسی باید رعایت کنید. تمام کاراکترها، علائم و نشانهها را در این بخش با جزئیات برای شما شرح میدهیم.
مهارها – ^ و $ در ریجکس
هر کدام از علائم در ریجکس معنا و مفهوم متفاوتی دارند. در این بخش هر کدام را به صورت مجزا شرح دادیم:
علامت کارت Caret (^) در ریجکس regex
متا کاراکتر کارت Caret (^) در Regular Expression چه کاربردی دارد؟
مثال: یک سایت فروشگاهی را تصور کنید که میخواهید آمار آن را براساس تمام کلمه یا عباراتی که با قیمت شروع میشوند، در آورید. کوئری که به شما نشان دهد با چه عبارتهایی که با “قیمت” شروع میشوند روی سایت ورودی دارید؟
راه حل: برای این کار کافی است که کوئری زیر را بنویسید:
(^)قیمت
علامت دلار Dollar Sign ($) در ریجکس regex
علامت دلار Dollar Sign ($) در ریجکس regex کاربردی خلاف علامت ^ را دارد.
مثال: تصور کنید، برای آنالیز یک وبسایت به عبارتهایی که با “ارزان” ختم شدند، نیاز دارید. در این حالت چه کوئری باید بنویسید؟
راهحل: شما باید دستور زیر را در کادر کوئری درج کنید:
($)ارزان
سورها – * + ? و {} در ریجکس
هر کدام از سورها را به صورت مجزا توضیح دادیم که متوجه کاربرد آن در نوشتن ریجکسی بشوید:
علامت ستاره Asterisk (*) در ریجکس regex
این علامت برای تکرار چندباره یا صفرباره کاراکتر قبلیاش کاربرد دارد.
مثال: تصور کنید، در یک وبسایت فروش کتاب، تصمیم دارید کلماتی که با تکرار اشتباه حروف در سایت وجود دارد را پیدا کنید. چطور این کار را انجام میدهید؟
راهحل: عبارت boo*ks را قسمت کوئری بنویسید، بنابراین هر عبارتی که تکرار o را داشته باشد، برای شما نمایش داده میشود.
books,books,boks,….
علامت سوال Question Mark (?) در ریجکس regex
علامت سوال در نوشتن ریجکسی یعنی کاراکتر آخر هرچیزی میتواند باشد.
مثال: تصور کنید من یک شرکت تاسیس کردم و نام آن را “آیندگان” گذاشتم، حالا اگر دو شرکت آیندگان وجود داشته باشد و عدهای برای اینکه به شرکت من دسترسی پیدا کنند، عبارت پرویز آیندگان را سرچ کنند، من روی این عبارت ورودی دارم. می خوام از این موضوع مطمئن شوم که به ازای هر کلیک در گوگل آنالیتیکس چه جستجوهایی با اسم من انجام شده، حالا باید چه رجکسی را طراحی کنم؟
راهحل: باید اسم خودم را در کنار علامت $ بگذارم.
علامت خط تیره Dashes (-) در رجکس regex
این علامت در نوشتن RegEx به معنای تعیین یک محدوده است.
مثال: شما میخواهید هر عبارتی که با عدد 1398 تا 1402 را جمع آوری کنید و تمام عباراتهایی که حاوی این مقدار هستند را اصلاح کنید. راه حل چه خواهد بود؟
راهحل: با کمک گرفتن از [] و – میتوانید تمام عبارتها را جمع آوری کنید. کافی است به شکل زیر بنویسید:
]1398-1402[ یعنی همه عبارتهایی در سایت که اعدادی در بازه 1398 تا 1402 را دارد به من نشان بده.
علامت آکولاد Curly brackets ({ }) در رجکس Regex
یاد گرفتن این علامت خیلی ساده است. تعداد تکرار کاراکتر مورد نظر را داخل آکولاد می نویسید. به مثال زیر توجه کنید:
مثال: {2} یعنی آخرین کاراکتر قبل از آکولاد، 2 بار تکرار شود.
مثال: {4,5} یعنی آخرین کاراکتر قبل از آکولاد، حداقل 4 بار و حداکثر 5 بار تکرار شود.
مثال: {4,8} یعنی آخری کاراکتر قبل از آکولاد، حداقل 4 بار و حداکثر 8 بار تکرار شود.
علامت جمع (+) در ریجکس regex
این علامت در رجکس خیلی پرکاربرد نیست اما دانستن آن هم بد نیست! با این علامت میتوانید یک یا چند کاراکتر قبل را که تکرار شده را پیدا کنید. به مثال ساده زیر توجه کنید:
مثال: regex+ با این دستور شما میتوانید عباراتی مانند regexx – regex – regexxxx را مشاهده کنید.
عملگر OR – | یا [] در رجکس
عملگرها هم در زبان برنامه نویسی و هم در نوشتن کوئری معنا و مفهوم دارد، در زیر به هر کدام اشاره می کنیم:
عملگر (|) پایپ در ریجکس Regex
عملگر (|) پایپ در رجکس regex یعنی “یا” ، برای درک بهتر به مثال زیر توجه کنید:
مثال: اگر بخواهید عبارت نخ بخیه یا نخ جراحی را وبسایت جستجو کنید، باید چطور عمل کرد؟ آیا درست است که، تمام سایت را پرس و جو کنید و این عبارت را پیدا کنید؟
راهحل: خیر، با کمک علامت پایپ میتوان تمام عبارتهایی که کلمه نخ بخیه یا نخ جراح وجود دارد را جمع آوری کنید. برای این کار دستور زیر را بنوسید:
نخ جراحی | نخ بخیه
علامت کروشه Square Brackets ([])
این علامت برای اینکه بتوانید لیست در کوئری ایجاد کنید، مناسب است. این علامت به شکل زیر کاربرد دارد:
مثال: t[iao]p تمام عبارتهایی که شامل top – tip – tap باشند را به شما نشان میدهد.
دستههای کاراکتر – d \w \s\ و . در ریجکس
درک دقیق و درست کاراکترها، به شما در نوشتن کوئری کمک میکند، در زیر به هرکدام اشاره میکنیم و با یک مثال توضیح میدهیم:
. دات (Dot) در ریجکس Regex
کاراکتر . دات (Dot) در Regular Expression کاربرد زیادی دارد.
مثال: “خرید کتانی نایک” که برخی به صورت “خرید کتونی نایک” سرچ میکنند را در نظر داشته باشید. طبیعتا کار دشواری است که شما هر کدام از صفحاتی که خرید کتونی / کتانی نایک سرچ میشود را پیدا کنید. حتی ممکن است برخی “خرید کتانی/کتونی نایک” یا خرید کتانی/کتونی نایکی” سرچ کنند. حالا آنالیز میزان سرچ ورودی کار سختتری شد. پس چه باید کرد؟
راه حل: یک کوئری بنویسید به صورت زیر:
خرید کت.نی نایک.
مثال: تصور کنید که نمیدانید کلمه کلید یا عبارت کلیدی شما به چه صورت نوشته میشود؟ به عنوان مثال کلمه کلیدی شما “تصویه مالیات” است. شما حدس میزنید که شاید کاربران شما “تسویه مالیات” هم سرچ کنند. حالا چطور باید کاربران را آنالیز کنید؟
راه حل: تنها کافی است با . و [] یک کوئری به صورت زیر بنویسید:
ت]س ص[ویه مالیات
کاراکتر \s در رجکس چه کاربردی دارد؟
این کاراکتر، هر کاراکتری را که فاصله و جداکننده نباشد را به شما نشان میدهد. دستور خیلی مهمی نیست اما دانستن آن به شما کمک میکند تا در کوئریهای پیچیده از آن استفاده کنید.
کاراکتر \w در رجکس چه کاربردی دارد؟
این دستور به شما هر کاراکتری را که کلمه نباشد نشان میدهد. به تنهایی این دستور کاربردهای زیادی ندارد اما در دستورنویسیهای پیچیده میتوانید از آن استفاده کنید.
کاراکتر \d در ریجکس چه کاربردی دارد؟
هر کاراکتری که عدد نباشد را به شما نشان میدهد. با بک اسلش D میتوانید این دستور را بنویسید که ما پیشنهاد میکنیم در دستورات پیچیده از آن استفاده کنید.
فلگ ها در ریجکس
فلگها سری حروفهایی هستند که نقش بسیار مهمی را در نوشتن کوئری ایفا میکنند. فلگهایی مانند i و g که به ترتیب گرفته شده از کلمه insensitive و global هستند، در نوشتن ریجکس کاربرد زیادی دارند. به مثالهای زیر توجه کنید:
مثال:
Var regex= /shayan/i
در این مثال بیان میکنید که کلمه shayan در هرجای سایت وجود داشت، فارغ از بزرگ و کوچکی حروف را نمایش دهد.
مثال:
Var regex= /shayan/ig
در این مثال بیان میکند که کلمه مورد نظر فارغ از بزرگ و کوچکی و با در نظر گرفتن تکرار نمایش داده شود.
گروه بندی و capture – () در ریجکس
با پرانتز میتوانید گروه بندی کنید. تصور کنید که به یک رشته اطلاعات نیاز دارید. بر این اساس نیاز دارید که یکسری حروف را گروه بندی کنید. تصور کنید که به یک رشته از یا یک آرایه نیاز دارید. اگر تجربه کار با زبان برنامه نویسی را داشته باشید، آرایه را میشناسید. با این کار میتوانید یک آرایه یا رشته ای از کاراکترها را بسازید.
عبارتهای براکت – [] در ریجکس
عبارتها در براکت میتوانند یک بازه باشند. به بیان دیگر شما میتوانید از حروف A تا Z را با استفاده از این دستور بدست آورید.
تطبیق Greedy و Lazy در رجکس
Greedy عملگرهای حریص هستند که تا آنجایی که بشود امکان گسترش روی متن را دارد. Lazy نقطه مقابل است که برای عملگر تنبل از آن استفاده میشود. برای اینکه فقط عبارت داخل <> را تطبیق دهد، از علامت سوال ؟ استفاده میشود تا greedy به lazy تغییر کند.
کران ها – b\ و B\ در رجکس
نتیجهای که نمایش داده میشود، بیان میکند که موقعیتهایی تطبیق پیدا میکند که یک طرف کلمه باشد و طرف دیگر کلمه نباشد. برای حالت نفی آن از \B استفاده میکنیم.
1\ در ریجکس
تنها در صورتی که تطبیق ایجاد شود، از این الگو استفاده میکند. به مثال زیر توجه کنید:
([abc])\1
این مثال بیان میکند که نتیجه با متنی که در گروه نخست capture است مطابقت یافته است. به جای عدد 1 اگر عدد 2 باشد، بیان میکند که نتیجه با متنی که در گروه دوم capture است، مطابقت دارد.
گشتن در سمت جلو و عقب (=?) و (=>?) در رجکس
هر عبارتی که پیدا میشود، تنها در حالتی تطبیق یافته که یا در ادامه کاراکتر مورد نظر آمده باشد و یا اینکه قبل از آن کاراکتر مورد نظر آمده باشد.
مثال:
d(?=r)
این مثال نتایجی را نشان میدهد که در ادامه r آمده باشد و یا بخشی از تطبیق نباشد.
مثال:
(?<=r)d
بیان میکند که عبارتی نمایان شود که قبل از آن r باشد اما جزئی از تطبیق regex نباشد.
کاربرد فیلترهای جداول Table filters)) در رجکس
با استفاده از فیلترهای جداول (Table filters) میتوانید متوجه شوید که نتیجه مورد نظر خود را دریافت کردید یا خیر؟ بنابراین جداول را در عبارتهای با قاعده منظم جدی بگیرید. با کمی دقت و قدرت تفسیر رجکسها میتوانید بهرهوری بالایی داشته باشید.
اگر تصمیم دارید به دنیای سئو تکنیکال ورود کنید، مطالعه فایل robots.txt چیست را پیشنهاد میکنیم.
چگونه ریجکس طراحی کنیم؟
یکی از راهکارهایی که به شما کمک میکند تا در کمترین زمان ممکن بهترین و باکیفیتترین اطلاعات را دریافت کنید، طراحی رجکس است. برای اینکه بتوانید این کار را انجام دهید، باید تمام قوانین و شیوه نوشتن دستورات را یاد بگیرید. اگر از ابتدا تا انتهای این مقاله را دنبال کردید، شما اولین قدم را در طراحی ریجکس برداشتید. برای نوشتن به هر زبانی باید حروف الفبا را یاد بگیرید که شما حروف را آموختید، حالا با توجه به اطلاعاتی که کسب کردید، با توجه به نوع نیاز خود، دستور نویسی در رجکس را شروع کنید.
مثال: تصور کنید یک سایت با تعدادی کاربر فعال دارید که عضو وبسایت شما شدند. شما نیاز دارید، اعضای تهرانی را پیدا کنید، با این کار میخواهید میزان جذابیت و کاربردی بودن وبسایت را بسنجید، با شماره کد ملی میتوانید این کار را انجام بدهید. پس دستور زیر را میتوانید بنویسید:
001\d{8}
حالا لیستی از نتایج به شما ارائه میشود از اشخاصی که کد ملی خود را به درستی وارد کردند و البته تهرانی هستند.
مثال: به دلایلی برای شما مه است که افرادی را پیدا کنید که در وبسایت شما 5 دوره را خریداری کرند، تصمیم دارید یک جشنواره راهاندازی کنید که به افرادی که 5 دوره یا بیشتر را ثبت نام کردند امکان شرکت در جشنواره را بدهید. پس دستور زیر را میتوانید بنویسید:
5\d
کاربرد تسترها یا آزمایشگرهای Regular Expressions
در برنامه نویسی و نوشتن کدها ریجکسی آن چیزی که به شما در دریافت کوئری مورد نظر کمک میکند، تست و امتحان ریجکسی تعریف شده است. به دو روش میتوانید، رجکسی خود را تعریف کنید:
- ابزارهای آنلاین
- فیلتر جداول
در روش اول میتوانید در گوگل سرچ کنید و مناسبترین وبسایت آنلاین را انتخاب کنید. سایتهای بسیاری وجود دارند که شما از این طریق بتوانید، کدهای خود را تست کنید. در روش دوم میتوانید فیلترهای جداول را اعمال کنید و از این طریق کدهای خود را ارزیابی کنید.
مثال: اعتبارسنجی نام کاربری
تصور کنید در چند خط از دستور ریجکسی تصمیم داریم، امکان ثبت نام کاربری را برای کاربران محدود کنیم. شرایط زیر را مد نظر داشته باشید:
- تنها در آخر کاراکتر میتواند عدد بگذارد.
- در کاراکترها امکان حروف بزرگ و کوچک وجود دارد.
- تعداد کاراکترها میتواند حداکثر 8 تا باشد.
var string = “sahand5”;
var regex = /^[a-zA-z]{8,}\d*$/;
string.match(regex);
مثال: اعتبار سنجی انواع آدرس سایت
میخواهیم رجکسی را بنویسیم که با ساختار url سازگار باشد.
var string = “https://sokanacademy.com”;
var regex = /http[s]*:\/\/[www\.]*\w+\.\w{3}/;
string.match(regex);
در سایت github.com گوگل به شرح کامل آن پرداخته که پرکاربردهای به شرح زیر است:
Regular expressions are a notation for describing sets of character strings. When a particular string is in the set described by a regular expression, we often say that the regular expression matches the string.
The simplest regular expression is a single literal character. Except for the metacharacters like
*+?()|
, characters match themselves. To match a metacharacter, escape it with a backslash:\+
matches a literal plus character.Two regular expressions can be alternated or concatenated to form a new regular expression: if e1 matches s and e2 matches t, then e1
|
e2 matches s or t, and e1e2 matches st.The metacharacters
*
,+
, and?
are repetition operators: e1*
matches a sequence of zero or more (possibly different) strings, each of which match e1; e1+
matches one or more; e1?
matches zero or one.The operator precedence, from weakest to strongest binding, is first alternation, then concatenation, and finally the repetition operators. Explicit parentheses can be used to force different meanings, just as in arithmetic expressions. Some examples:
ab|cd
is equivalent to(ab)|(cd)
;ab*
is equivalent toa(b*)
.The syntax described so far is most of the traditional Unix egrep regular expression syntax. This subset suffices to describe all regular languages: loosely speaking, a regular language is a set of strings that can be matched in a single pass through the text using only a fixed amount of memory. Newer regular expression facilities (notably Perl and those that have copied it) have added many new operators and escape sequences, which make the regular expressions more concise, and sometimes more cryptic, but usually not more powerful.
It also lists some syntax accepted by PCRE, PERL, and VIM.
kinds of single-character expressions | examples |
---|---|
any character, possibly including newline (s=true) | . |
character class | [xyz] |
negated character class | [^xyz] |
Perl character class (link) | \d |
negated Perl character class | \D |
ASCII character class (link) | [[:alpha:]] |
negated ASCII character class | [[:^alpha:]] |
Unicode character class (one-letter name) | \pN |
Unicode character class | \p{Greek} |
negated Unicode character class (one-letter name) | \PN |
negated Unicode character class | \P{Greek} |
Composites | |
---|---|
xy | x followed by y |
x|y | x or y (prefer x ) |
Repetitions | |
---|---|
x* | zero or more x , prefer more |
x+ | one or more x , prefer more |
x? | zero or one x , prefer one |
x{n,m} | n or n +1 or … or m x , prefer more |
x{n,} | n or more x , prefer more |
x{n} | exactly n x |
x*? | zero or more x , prefer fewer |
x+? | one or more x , prefer fewer |
x?? | zero or one x , prefer zero |
x{n,m}? | n or n +1 or … or m x , prefer fewer |
x{n,}? | n or more x , prefer fewer |
x{n}? | exactly n x |
x{} | (≡ x* ) (NOT SUPPORTED) VIM |
x{-} | (≡ x*? ) (NOT SUPPORTED) VIM |
x{-n} | (≡ x{n}? ) (NOT SUPPORTED) VIM |
x= | (≡ x? ) (NOT SUPPORTED) VIM |
Implementation restriction: The counting forms x{n,m}
, x{n,}
, and x{n}
reject forms that create a minimum or maximum repetition count above 1000. Unlimited repetitions are not subject to this restriction.
Possessive repetitions | |
---|---|
x*+ | zero or more x , possessive (NOT SUPPORTED) |
x++ | one or more x , possessive (NOT SUPPORTED) |
x?+ | zero or one x , possessive (NOT SUPPORTED) |
x{n,m}+ | n or … or m x , possessive (NOT SUPPORTED) |
x{n,}+ | n or more x , possessive (NOT SUPPORTED) |
x{n}+ | exactly n x , possessive (NOT SUPPORTED) |
Grouping | |
---|---|
(re) | numbered capturing group (submatch) |
(?P<name>re) | named & numbered capturing group (submatch) |
(?<name>re) | named & numbered capturing group (submatch) |
(?'name're) | named & numbered capturing group (submatch) (NOT SUPPORTED) |
(?:re) | non-capturing group |
(?flags) | set flags within current group; non-capturing |
(?flags:re) | set flags during re; non-capturing |
(?#text) | comment (NOT SUPPORTED) |
(?|x|y|z) | branch numbering reset (NOT SUPPORTED) |
(?>re) | possessive match of re (NOT SUPPORTED) |
re@> | possessive match of re (NOT SUPPORTED) VIM |
%(re) | non-capturing group (NOT SUPPORTED) VIM |
Flags | |
---|---|
i | case-insensitive (default false) |
m | multi-line mode: ^ and $ match begin/end line in addition to begin/end text (default false) |
s | let . match \n (default false) |
U | ungreedy: swap meaning of x* and x*? , x+ and x+? , etc (default false) |
Flag syntax is xyz
(set) or -xyz
(clear) or xy-z
(set xy
, clear z
).
Empty strings | |
---|---|
^ | at beginning of text or line (m =true) |
$ | at end of text (like \z not \Z ) or line (m =true) |
\A | at beginning of text |
\b | at ASCII word boundary (\w on one side and \W , \A , or \z on the other) |
\B | not at ASCII word boundary |
\g | at beginning of subtext being searched (NOT SUPPORTED) PCRE |
\G | at end of last match (NOT SUPPORTED) PERL |
\Z | at end of text, or before newline at end of text (NOT SUPPORTED) |
\z | at end of text |
(?=re) | before text matching re (NOT SUPPORTED) |
(?!re) | before text not matching re (NOT SUPPORTED) |
(?<=re) | after text matching re (NOT SUPPORTED) |
(?<!re) | after text not matching re (NOT SUPPORTED) |
re& | before text matching re (NOT SUPPORTED) VIM |
re@= | before text matching re (NOT SUPPORTED) VIM |
re@! | before text not matching re (NOT SUPPORTED) VIM |
re@<= | after text matching re (NOT SUPPORTED) VIM |
re@<! | after text not matching re (NOT SUPPORTED) VIM |
\zs | sets start of match (= \K) (NOT SUPPORTED) VIM |
\ze | sets end of match (NOT SUPPORTED) VIM |
\%^ | beginning of file (NOT SUPPORTED) VIM |
\%$ | end of file (NOT SUPPORTED) VIM |
\%V | on screen (NOT SUPPORTED) VIM |
\%# | cursor position (NOT SUPPORTED) VIM |
\%'m | mark m position (NOT SUPPORTED) VIM |
\%23l | in line 23 (NOT SUPPORTED) VIM |
\%23c | in column 23 (NOT SUPPORTED) VIM |
\%23v | in virtual column 23 (NOT SUPPORTED) VIM |
Escape sequences | |
---|---|
\a | bell (≡ \007 ) |
\f | form feed (≡ \014 ) |
\t | horizontal tab (≡ \011 ) |
\n | newline (≡ \012 ) |
\r | carriage return (≡ \015 ) |
\v | vertical tab character (≡ \013 ) |
\* | literal * , for any punctuation character * |
\123 | octal character code (up to three digits) |
\x7F | hex character code (exactly two digits) |
\x{10FFFF} | hex character code |
\C | match a single byte even in UTF-8 mode |
\Q...\E | literal text ... even if ... has punctuation |
\1 | backreference (NOT SUPPORTED) |
\b | backspace (NOT SUPPORTED) (use \010 ) |
\cK | control char ^K (NOT SUPPORTED) (use \001 etc) |
\e | escape (NOT SUPPORTED) (use \033 ) |
\g1 | backreference (NOT SUPPORTED) |
\g{1} | backreference (NOT SUPPORTED) |
\g{+1} | backreference (NOT SUPPORTED) |
\g{-1} | backreference (NOT SUPPORTED) |
\g{name} | named backreference (NOT SUPPORTED) |
\g<name> | subroutine call (NOT SUPPORTED) |
\g'name' | subroutine call (NOT SUPPORTED) |
\k<name> | named backreference (NOT SUPPORTED) |
\k'name' | named backreference (NOT SUPPORTED) |
\lX | lowercase X (NOT SUPPORTED) |
\ux | uppercase x (NOT SUPPORTED) |
\L...\E | lowercase text ... (NOT SUPPORTED) |
\K | reset beginning of $0 (NOT SUPPORTED) |
\N{name} | named Unicode character (NOT SUPPORTED) |
\R | line break (NOT SUPPORTED) |
\U...\E | upper case text ... (NOT SUPPORTED) |
\X | extended Unicode sequence (NOT SUPPORTED) |
\%d123 | decimal character 123 (NOT SUPPORTED) VIM |
\%xFF | hex character FF (NOT SUPPORTED) VIM |
\%o123 | octal character 123 (NOT SUPPORTED) VIM |
\%u1234 | Unicode character 0x1234 (NOT SUPPORTED) VIM |
\%U12345678 | Unicode character 0x12345678 (NOT SUPPORTED) VIM |
Character class elements | |
---|---|
x | single character |
A-Z | character range (inclusive) |
\d | Perl character class |
[:foo:] | ASCII character class foo |
\p{Foo} | Unicode character class Foo |
\pF | Unicode character class F (one-letter name) |
Named character classes as character class elements | |
---|---|
[\d] | digits (≡ \d ) |
[^\d] | not digits (≡ \D ) |
[\D] | not digits (≡ \D ) |
[^\D] | not not digits (≡ \d ) |
[[:name:]] | named ASCII class inside character class (≡ [:name:] ) |
[^[:name:]] | named ASCII class inside negated character class (≡ [:^name:] ) |
[\p{Name}] | named Unicode property inside character class (≡ \p{Name} ) |
[^\p{Name}] | named Unicode property inside negated character class (≡ \P{Name} ) |
Perl character classes (all ASCII-only) | |
---|---|
\d | digits (≡ [0-9] ) |
\D | not digits (≡ [^0-9] ) |
\s | whitespace (≡ [\t\n\f\r ] ) |
\S | not whitespace (≡ [^\t\n\f\r ] ) |
\w | word characters (≡ [0-9A-Za-z_] ) |
\W | not word characters (≡ [^0-9A-Za-z_] ) |
\h | horizontal space (NOT SUPPORTED) |
\H | not horizontal space (NOT SUPPORTED) |
\v | vertical space (NOT SUPPORTED) |
\V | not vertical space (NOT SUPPORTED) |
ASCII character classes | |
---|---|
[[:alnum:]] | alphanumeric (≡ [0-9A-Za-z] ) |
[[:alpha:]] | alphabetic (≡ [A-Za-z] ) |
[[:ascii:]] | ASCII (≡ [\x00-\x7F] ) |
[[:blank:]] | blank (≡ [\t ] ) |
[[:cntrl:]] | control (≡ [\x00-\x1F\x7F] ) |
[[:digit:]] | digits (≡ [0-9] ) |
[[:graph:]] | graphical (≡ [!-~] ≡ [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_ ` {|}~] ) |
[[:lower:]] | lower case (≡ [a-z] ) |
[[:print:]] | printable (≡ [ -~] ≡ [ [:graph:]] ) |
[[:punct:]] | punctuation (≡ [!-/:-@[- ` {-~] ) |
[[:space:]] | whitespace (≡ [\t\n\v\f\r ] ) |
[[:upper:]] | upper case (≡ [A-Z] ) |
[[:word:]] | word characters (≡ [0-9A-Za-z_] ) |
[[:xdigit:]] | hex digit (≡ [0-9A-Fa-f] ) |
جمع بندی ریجکس یا Regex
در این مقاله سعی کردیم به صورت جامع و کامل تمام توضیحات را درباره رجکس Regex و دستوراتی که میتوانید با آن بنویسید، ارائه کنیم. امید داریم که تمام مطالب به دانش شما بیافزاید و در مسیر تجزیه و تحلیل به شما کمک کرده باشد.
سوالات متداول
چطور در سرچ کنسول ریجکس بنویسم؟
ابتدا سایت را به سرچ کنسول مرتبط کنید، سپس وارد قسمت performance شوید و روی علامت + کلیک کنید در کادر باز شده، با انتخاب Regex شروع به نوشتن رجکسی کنید.
چرا باید ریجکس یاد بگیریم؟
عبارات با قاعده منظم به شما کمک میکند تا با توجه به حجم زیاد اطلاعات، کوئری مورد نظر خود را دریافت کنید و باتوجه به آنچه بدست آوردید، شروع به طراحی و اصلاح استراتژی کنید.
آیا ریجکس در آنالیتیکس کاربرد دارد؟
بله، رجکس Regex هم در سرچ کنسول هم در آنالیتیکس کاربرد دارد.
18 دیدگاه
1402/11/22 زمان 10:01 ق.ظ
ممنون از توضیحات کامل شما من در سرچ کنسول میخوام چند تا کلمه رو حذف کنم ممنون میشم راهنمایی بفرمایید.
1402/11/22 زمان 10:13 ق.ظ
سلام وقت شما بخیر، یک فیلتر جدید اضافه کنید و Query رو انتخاب کنید سپس نوع فیلتر رو Custom (regex) قرار بدید در بخش Enter regular به این شکل عبارت هاتون رو بنوسید ریجکس|رجکس|Regex اگه فیلتر پایینی Matches regex باشه یعنی مواردی رو نمایش بده که این عبارات رو دارن و اگه Doesn’t Matches regex باشه یعنی اونهایی رو نمایش میده که عبارات شما در اونها نیست.
1402/12/20 زمان 11:07 ق.ظ
سلام و درود خدمت شما سوالی که داشتم اینه که من میخوام بخش مقاله و محصولاتم رو جدا کنم و یا فقط اونها رو بررسی کنم چطور میتونم انجام بدم؟
1402/12/20 زمان 6:18 ب.ظ
سلام وقت شما بخیر برای این کار در بخش Performance on Search results قسمت New Query وارد بشید و URLs containing به عنوان مثلا /shop/ قرار بدید، این به این معنا هست که هر آدرسی که در آن /shop/ قرار دارد نمایش داده شود. و در صورتی که URLs not containing را انتخاب بفرمایید یعنی هر URL که /shop/ در آن وجود ندارد.
1402/12/27 زمان 9:40 ق.ظ
یک سوال ریجکس چیست؟ ساده واقعا چه دنیای بزرگی هست، حالا ممنون میشم با استفاده از “ریجکس” برای جستجو و استخراج اطلاعات اشاره شده، مثالهایی از عبارات ریجکس پیچیده برای جستجوی الگوهای خاص در دادهها ارائه دهید؟ ممنون از توجه شما
1402/12/27 زمان 9:45 ق.ظ
همانطور که در مقاله “ریجکس چیست؟” اشاره شد، “ریجکس” (Regular Expressions) عباراتی هستند که برای جستجو و استخراج اطلاعات از دادهها استفاده میشوند.
چند نمونه مثال خدمت شما:
1. جستجوی آدرس ایمیل:
Code snippet
^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$
این عبارت ریجکس به دنبال موارد زیر میگردد:
یک رشته از حروف، اعداد، علائم نگارشی و خط تیره
علامت “@”
یک نام دامنه که با یک حرف یا عدد شروع میشود
حداقل 0 و حداکثر 61 حرف یا عدد
یک نقطه (.)
یک نام دامنه سطح بالا (مانند .com)
2. جستجوی شماره تلفن:
Code snippet
^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$
این عبارت ریجکس به دنبال موارد زیر میگردد:
(اختیاری) کد کشور (+ و 1 تا 2 رقم)
(اختیاری) پرانتز باز (
3 رقم
) پرانتز بسته)
یک فاصله، خط تیره یا نقطه
3 رقم
یک فاصله، خط تیره یا نقطه
4 رقم
3. جستجوی تاریخ:
Code snippet
^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2]))|(?:0?[1-9]|1[0-2])(\/|-|\.)(?:0?[1-9]|1[0-2]))|(?:29(\/|-|\.)02))|(?:0?[1-9]|1[0-2])(\/|-|\.)(20[0-9][0-9]))$
این عبارت ریجکس به دنبال موارد زیر میگردد:
روز:
31 برای ماههای 1، 3، 5، 7 و 8
29 یا 30 برای ماههای 4، 6، 9 و 11
1 تا 9 یا 10 تا 12 برای ماههای 2 و 10
ماه:
01 تا 09 یا 10 تا 12
سال:
2000 تا 2099
4. جستجوی کد پستی:
Code snippet
^([0-9]{5})(-[0-9]{4})?$
این عبارت ریجکس به دنبال موارد زیر میگردد:
5 رقم
(اختیاری) خط تیره (-)
4 رقم
نکاتی برای استفاده از عبارات ریجکس:
عبارات ریجکس میتوانند بسیار پیچیده باشند.
قبل از استفاده از عبارات ریجکس، حتماً آنها را به درستی آزمایش کنید.
منابع آنلاین زیادی برای یادگیری عبارات ریجکس وجود دارد.
در اینجا چند منبع مفید برای یادگیری بیشتر در مورد عبارات ریجکس آورده شده است:
آموزش ریجکس:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
RegexOne: https://regexone.com/
Regex Tutorial: https://www.regular-expressions.info/tutorial.html
موفق و پیروز باشید.
1403/02/13 زمان 1:16 ق.ظ
ممنون از آموزش regex شما واقعا کاملترین آموزشی بود که دیده بودم و با دیدن مثال ها به جواب سوالم رسیدم.
1403/02/13 زمان 1:30 ق.ظ
ممنون از توجه شما، خوشحالم مورد تایید شما واقع شده.
1403/02/13 زمان 1:20 ق.ظ
ممنون از مقاله رجکس چیست شما فقط یک سوال دارم ممنون میشم راهنمایی بفرمایید اون هم اینکه من میتونم در .htaccess از ریجکس برای ریدایرکت های 301 استفاده کنم؟
1403/02/13 زمان 1:30 ق.ظ
بله، شما میتوانید از عبارات با قاعده (رجکس) در فایل .htaccess برای ریدایرکتهای 301 استفاده کنید. با استفاده از دستورات رجکس، میتوانید الگوهایی را تعریف کنید که در صروت برقراری شرط، رشته مشخص شده ریدایرکت شوند. به عنوان مثال، اگر میخواهید همه آدرسهایی که با “/old/” شروع میشوند به آدرسهای جدید با “/new/” ریدایرکت شوند، میتوانید از رجکس در فایل .htaccess استفاده کنید. مثال زیر نحوه استفاده از عبارت با قاعده در فایل .htaccess را نشان میدهد:
“`
RewriteEngine On
RewriteRule ^old/(.*)$ /new/$1 [R=301,L]
“`
در این مثال، با استفاده از عبارت با قاعده “^old/(.*)$”، هر آدرسی که با “/old/” شروع میشود، به صورت 301 ریدایرکت به آدرس جدید با “/new/” انجام میشود.
1403/03/20 زمان 1:38 ب.ظ
سلام آقا حمید وقت بخیر مزاحم شدم من در سرچ کنسول میخوام سرچ برند رو از غیر برند جا کنم چجوری باید این کار رو انجام بدم؟ ممنون میشم راهنمایی بفرمایید.
1403/03/28 زمان 12:58 ب.ظ
سلام ژیلا خانم وقت شما بخیر، باید عرض کنم به سادگی این کار امکان داره فقط کافیه در بخش ریجکس کوئری به شکل مچ با برند .*domainName* و در بخش مخالف نان مچ با .*domainName* رو اضافه بفرمایید.
1403/06/05 زمان 3:38 ب.ظ
سلام من سئو کار می کنم و تازه وارد این حوزه شدم، میشه بگید که رجکس دقیقا برای چه کسانی خوبه؟ یا اینکه هر کسی که وارد سئو میشه باید رجکس بدونه؟
1403/08/13 زمان 3:12 ب.ظ
سلام امیرعلی جان وقت شما بخیر، برای فیلتر کردن و یا بررسی بخش های خاص نیاز هست، مثلا شما میخواید ببینید ورودی های شما با نام برند فقط چقدر بوده، یا یک محصول خاص. برای این موارد خوب راحترتر هست از ریجکس استفاده بشه.
1403/08/12 زمان 5:14 ب.ظ
سلام من میخوان تعدادی از کلمات رو بر اساس User Intent Informational یا همون هدف کاربر جدا کنم، بخوام با ریجکس انجام بدم چجوری میشه؟
1403/08/13 زمان 2:47 ب.ظ
سلام عسل خانم وقت شما بخیر به این شکل میتونید با ریجکس اجراش کنید:
who|what|where|when|why|how|was|did|do|is|are|aren’t|won’t|
does|if|can|could|should|would|won’t|were|weren’t|shouldn’t|
couldn’t|cannot|can’t|didn’t|did not|does|doesn’t|wouldn’t
1403/08/13 زمان 11:15 ق.ظ
ممنون ریجکی رو عالی توضیح دادید نمیشه یک فایل ویدئویی هم داشته باشه؟
1403/08/13 زمان 2:45 ب.ظ
سلام ملیکا خانم وقت شما بخیر، حتما چشم آماده میکنم.