بریم یه نماد دیگه رو هم یاد بگیرم و اون هم نماد $ (دلار ساین) است که دقیقا برعکس ^ برای آخر جمله استفاده میشه
بریم یه متن بنویسیم و روش یه تست پیاده کنیم:
JavaScript
PostScript
shelllll
ActionScript
PowerShell
AppleScript
Script
Network
hello1
PHP
خب توی متن بالا میخوایم تمامی عبارت هایی رو پیدا کنیم که به Script ختم بشن:
/Script$/img
Script, Script, Script, Script, Script
با دستور بالا 5 تا تطابق داریم ، اما اینجا به یه موضوعی پی میبریم
اونم اینکه تا فعلا با ریجکس فقط یه اسم ثابت رو جستجو کردیم که با find ساده توی یک زبان برنامه نویسی پیدا میشد ، پس چرا از ریجکس استفاده کردیم؟ اینجاست که باید بگم یه زمانی ما دنبال یه کلمه ثابت هستیم و میخوایم ایندکس اون کلمه رو توی متن پیدا کنیم و ممکنه اون کلمه چنبار در جمله اومده باشه ، برای همین با ریجکس میتونیم ایندکس رو بدست بیارم (و اینکه میخواید با ایندکسش چیکار کنید به خودتون مربوطه ، مثلا اگر بخواید از ایندکس 20 تا ایندکس 40 متن رو فقط replace کنید از این روش استفاده میکنید ، البته ممکنه همین کارو بتونید با چنتا تابع متفاوت هندل کنید)
let str = ... //همون مثال بالا;
let pattern = /Script$/gm
let arr = [...str.matchAll(pattern)]
console.log(arr);
//(5) [Array(1), Array(1), Array(1), Array...]
// اگه یکی از آرایه هارو باز کنیم همچین چیزی میبینم:
// ["Script", 4, "JavaScript\nPostScrip...]
// که اولین ایندکس، کلمه پیدا شده ، دومین ایندکس ، ایندکس کلمه داخل متن و سومین ایندکس خود متنه
/^hello$/igm
ریجکس بالا فقط عبارت هایی رو پیدا میکنه که اول جمله با hello شروع بشه و با hello هم تموم بشه
حالا برسیم سر یه موضوع دیگه ، و یکمی جدی تر وارد دنیای قشنگ و قدرتمند ریجکس بشیم
مثال اول رو یادتونه که دنبال عبارت هایی میگشتیم که به Script ختم بشن؟ اونجا فهمیدیم که فقط خود Script رو برای ما برمگیردونه ، ولی اگه ما بخوایم کلماتی رو پیدا کنیم که به Script ختم میشه (مثل خود کلمه AppleScript) باید چیکار کنیم؟
قبل از اینکه مثال بالا رو حل کنیم نیازه که چنتا چیز دیگه رو تو ریجکس یاد بگیرید
من مثال اول رو تغییر نمیدم و با همون پیش میریم
/shel/gmi
shel, shel
ریجکس بالا که خیلی ساده میاد و کلمه shell رو پیدا میکنه و اصلا هم کاری نداره کجای متنه ، کوچیکو بزرگم براش فرقی نداره
برای اینکه به محدودیت تلگرام نخوریم
#regex #regular_expression
#regex_3
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥15⚡3🔥2
JavaScript
PostScript
shelllll
ActionScript
PowerShell
AppleScript
Script
Network
hello1
PHP
/shel{2}/gmi
shell, shell
اینجا یه نماد جدید میبیند: {2} ، که خیلی مهمه
هر عددی که بین آکولاد بزارید ، تعداد رو مشخص میکنه ، یعنی توی ریجکس بالا دارید میگید دنبال عبارتی باش که اولش she داشته باشه و حرف l دقیقا دوبار تکرار بشه ، و چون توی متن اصلی PowerShell و shelllll دوتا ll پشت هم دارن ، پس این تطابق رو پیدا میکنه و دوتا shell برمیگردونه.
/ab{2}c/img
ریجکس بالا دنبال عبارت هایی میگرده که اولشون a ، آخرشون c و بینشون دقیقا 2 تا b باشه!
/shel*/img
shell, shelllll
پس با این وجود ریجکس بالا از متن ما دوتا کلمه shell و shelllll رو پیدا میکنه (دیگه چیزیو پیدا نکرد که مشابه هم باشه
/ab*c/img
ریجکس بالا دنبال عبارت هایی میگرده که اولشون a ، آخرشون c و بینشون کارکتر b به تعداد 0 یا اِن بار باشه !
منم توی پست فردا ادامه میدم
روز خوبی داشته باشید
بهتون تمرین میگم که توی کامنت برام جوابشو بنویسید (با هوش خودتون و چیزایی که از اینجا یاد گرفتید (کسایی که از قبل بلدن لطفا پاسخگو نباشن
br ber beer
#regex #regular_expression
#regex_3
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡12❤🔥4🔥3
خب توی آموزش قبلی در مورد نماد {} و * صحبت کردیم ، امروز قراره مسئله آموزش قبل رو حل کنیم و چنتا چیز جدید یاد بگیریم
بزارید مثال قبلی رو اینجا هم بزارم:
JavaScript
PostScript
shelllll
ActionScript
PowerShell
AppleScript
Script
Network
hello1
PHP
قبل از هرچیزی میخوام بهتون در مورد دسته های کارکتری بگم (دسته های کارکتر همون کارکتر های کنترلی در زبان های برنامه نویسی هستند مثل n\)
صد در صد با n\ آشنا هستید و میدونید که این کارکتر خط جدید ایجاد میکنه و کار Enter رو انجام میده
توی ریجکس هم همچین کارکتر هایی داریم که کار مشخصی رو انجام میدن (مثلا همین n\ رو داریم که خط جدید مشخص میکنه)
/\w/img
J, a, v, a, S, c, r, i, p, t, P, o, s, t, S, c, r, i, p, t, s, h, e, l, l, l, l, l, A, c, t, i, o, n, S, c, r, i, p, t, P, o, w, e, r, S ,h, e, l, l, A, p, p, l, e, S, c, r, i, p, t, S, c ,r, i, p, t, N, e, t, w, o, r, k, h, e, l, l, o, 1, P, H, P
یعنی بعد از J به a برخورد میکنه و a رو هم برمیگردونه و همینجوری الی آخر ادامه میده (پس در مثال بالا تمامی حروف و اعداد رو برمیگردونه)
/\w{2}/img
Ja, va, Sc, ri, pt, Po, st, Sc, ri, pt, sh, el, ll, ll, Ac, ti, on, Sc, ri, pt, Po, we, rS ,he, ll, Ap, pl, eS, cr, ip, Sc, ri, pt, Ne, tw, or, he, ll, o1, PH
/\w*/img
JavaScript, PostScript, shelllll, ActionScript, PoserShell, AppleScript, Script, Network, hello1, PHP
/\w+/img
JavaScript, PostScript, shelllll, ActionScript, PoserShell, AppleScript, Script, Network, hello1, PHP
نماد + هم دقیقا مثل * کار میکنه ، با این تفاوت که دیگه 0 تا n تعداد نیست! و میشه 1 تا n تعداد
البته توی مثال بالا خروجی * و + یکیه (چون به صورت تنها داره استفاده میشه)
حالا که این علامت هارو یاد گرفتیم ، بیاید توی مثالمون کلماتی رو جدا کنیم که آخرشون به Script ختم بشه:
/\w*Script/img
JavaScript, PostScript, ActionScript, AppleScript, Script
ریجکس بالا میاد دنبال عبارت هایی میگرده که اولشون 0 تا n تعداد حروف یا عدد (یا آندلاین) باشه و به اون ها Script چسبیده باشه.
به نظرتون ریجکس بالا مشکلی نداره ؟
در واقع اینجاست که فرق بین * و + فاحش میشه ، اگه جای * بالا از + استفاده کنیم دقیقا عبارت هایی رو برامون پیدا میکنه که اولشون یه حرفی وجود داشته باشه و به اون حرف Script چسبیده باشه ، ولی اگه از * استفاده کنیم Script خالی رو هم مطابقت میده که ما اینو نمیخایم
/\w+Script/img
JavaScript, PostScript, ActionScript, AppleScript
/a\w+c/img
ریجکس بالا دنبال عبارت هایی میگرده که اولشون a ، آخرشون c و بینشون اعداد، حروف و یا آندرلاین به تعداد 1 یا n بار باشه !
آموزش امروزمونم تموم شد ، امیدوارم خوشت اومده باشه
روز خوبی داشته باشید
#regex #regular_expression
#regex_4
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡16❤🔥6🔥3😁1
readme.md
document.pdf
image.png
music.mp4
manual.pdf
اگه بخوایم اسم تمامی فایل های pdf رو در بیارم باید چیکار کنیم؟ میدونیم که با استفاده از w/ میتونیم تمامی حروف و اعداد رو استخراج کنیم ، پس میدونیم داخل ریجکسمون w/ رو داریم! اما باید خدمتتون عرض کنم که برای مشخص کردن نقطه (.) نمیتونیم از خود نقطه استفاده کنیم
چرا ؟ چون علامت نقطه (.) توی ریجکس به معنای همه کارکترهاست (یعنی تمامی حروف، اعداد، علامت ها و کلا هرچیزی که بنویسید) برای اینکه از خود نقطه بتونیم استفاده کنیم باید از .\ استفاده کنیم که یه کارکتر کنترلیه دیگه داخل ریجکسه
پس ریجکسمون میشه این:
/\w+\.pdf/img
document.pdf, manual.pdf
متن زیر رو در نظر بگیرید :
numbers: 09112345656 09126787 0912567622
09118174522 676232323
12345678998
/09\w{9}/img
09112345656, 09118174522
برای حل این مشکل با یه دسته کارکتر دیگه به نام d\ آشنا میشیم (مخفف digit) که فقط اعداد رو قبول میکنه (یعنی فقط 0 تا 9) ، حالا با استفاده از این دسته کارکتر میتونید مطمئن باشید که دیگه 09abcdefgoi رو قبول نمیکنه
/09\d{9}/img
بیاید متنمو تغییر بدیم به یه چیز ساده :
aim amm aom arm azm
ما میخوایم توی متن ، دنبال عبارت هایی بگردیم که اولشون a داشته باشه ، آخرشون m داشته باشه و بین a و m حرف z باشه و یا o.
برای نوشتن ریجکس این مثال باید عملگر دیگه ایی رو هم مورد بررسی قرار بدیم و اون عملگر [] عه
ما با استفاده از عملگر براکت میتونیم یه بخش مجزا ایجاد کنیم (مجموعه کارکتر - Character Set)، برای درک بهتر ریجکس متن بالا رو مینوسیم:
/a[zo]m/g
aom, azm
(
/a(z|o)m/g
aom, azm
پرانتز در ریجکس به معنیه گروپ بندیه که در آموزش های بعدی مفصل تر در موردش صحبت میکنیم (ولی فعلا فرض کنید دقیقا مثل براکت عمل میکنه)، و علامت | (پایپ) هم معنیه "یا" رو میده (که احتمالا در برنامه نویسی ازش خبر دارید)
آموزش امروزمونم تموم شد
بهتون تمرین میگم که توی کامنت برام جوابشو بنویسید (با هوش خودتون و چیزایی که از اینجا یاد گرفتید (کسایی که از قبل بلدن لطفا پاسخگو نباشن
beer deer feer
#regex #regular_expression
#regex_5
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤🔥2⚡2
python
python%%10
python 3.12
pycharm
py file
sl file
من میخوام ریجکسی رو بنویسم که اولش py داشته باشه و در ادامه میتونه هرچیزی داشته باشه (هم فضای خالی، هم نماد، هم هرچیز دیگه ایی)
من یه ریجکس ساده مینویسم با استفاده از w\ ، که فرقشو با نقطه ببینید:
/py\w*/img
python, python, python, pycharm, py
/py.*/img
python , python%%10, python 3.12, py file
a, an, and, on, android
برای اینکه مشخص کنیم یه کارکتر اختیاریه (وجود داره یا نه) از نماد ? استفاده میکنیم:
/an?\w*/g
a, an, and, android
بزارید بازم متنو تغییر بدم (نزاریدم خودم تغییر میدم
amirroox(Dani) Score: 1000
amin Score: 0
amirMasood Score: 999
korosh Score: 90
Agha Reza Score: 55
flani Score: 6
ما میخوایم ریجکسی رو بنویسیم که اسم افراد به همراه امتیازشون رو برای ما برگردونه ، البته یه شرط داریم ، و اونم اینه که ، اونایی رو برگردونه که امتیاز 2 ، 3 و 4 رقمی دارن (امتیاز تک رقمی نمیخوایم
حالا با این تفاسیر بریم ریجکسو بنویسیم:
/.* Score: \d{2,4}/img
amirroox(Dani) Score: 1000, amirMasood Score: 999, korosh Score: 90, Agha Reza Score: 55
توی ریجکس بالا {2,4} رو میبینید ، قبلا در مورد حالت {n} صحبت کرده بودیم که معنیه تعداد رو میداد ، حالا وقتی کاما میزاریم ، یعنی یه رنج مشخص میکنیم! یعنی تعداد ما 2 تا 4 باشه
همچنین توجه داشته باشید که داخل آکولاد هیچ فضای خالی نباید وجود داشته باشه
aab, abb, acb, adb, aeb, agb, akb, alb
/a[abcd]b/g
/a(a|b|c|d)b/g
aab , abb, acb, adb
خب ، چه چیز جدیدی یاد گرفتیم؟ هنوز هیچی
اگه توجه کرده باشید a,b,c,d توی حروف الفبا ، پشت هم قرار گرفتن ، ریجکس هم برای هندل کردن همچین چیزایی بهتون کمک میکنه!
بجای نوشتن ریجکس بالا، میتونید از ریجکس پایین کمک بگیرید:
/a[a-d]b/g
aab , abb, acb, adb
/a[1-5]b/g
ریجکس بالا ، کلماتی رو انتخاب میکنه که اولشون a ، آخرشون b و بینشون اعداد 1 تا 5 باشه (مثلا اینارو قبول میکنه: a2b, a4b و اینارو قبول نمیکنه: a7b, a9b)
آموزش امروزمونم تموم شد
روز خوبی داشته باشید
#regex #regular_expression
#regex_6
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡16❤🔥3🔥2
قبلا در مورد براکت صحبت کردیم و گفتیم که پرانتز رو فعلا مشابه بدونید؛ اما امروز قراره این مبحث رو باز ترش کنیم.
amir 2002
ali 2000
daniyal 2002
hamid 2012
sobhan 1980
قبل از اینکه بخوام توضیح گروه بندی رو بدم ، بزارید یه ریجکس بنویسم:
/[a-zA-Z]* \d{4}/gm
amir 2002, ali 2000, daniyal 2002, hamid 2012, sobhan 1980
اگه تا حالا با آموزش پیش رفته باشید ، ریجکس بالا رو ساده میتونید بفهمید ؛ کل ریجکس بالا میگه عباراتی رو پیدا کن که ، اولشون کارکتر a تا z (هم بزرگ و هم کوچیک) و در ادامه یک فاصله و یک عدد 4 رقمی وجود داشته باشه.
[a-zA-Z0-9_]
یعنی شما با براکت خیلی راحت میتونید ، رنج های محتلفی ایجاد کنید :)
وقتی از گروه بندی استفاده میکنیم، یعنی ریجکس خودمون رو به بخش ها واحد دسته بندی کردیم (مثلا توی مثال بالا ، اول اسمه، دوم یه عدد 4 رقمی که سال تولده. ما میتونیم توی ریجکس گروه اول رو به اسم اختصاص بدیم و گروه دوم رو به سن و در دریافت مقادیر یه دسته بندی برای خودمون داشته باشیم)
([a-zA-Z]*) (\d{4})
amir 2002, ali 2000, daniyal 2002, hamid 2012, sobhan 1980
برای اینکه بفهمیم این اصلا کجا کاربرد داره ، من توی جاوا اسکریپت یه اسکریپت ساده مینویسم.
let text = '.....' // همون متن بالا
let regex = /([a-zA-Z]*) (\d{4})/gmi;
let matchAll = text.match(regex)
let names = [];
let born = [];
matchAll.forEach(() => {
let match = regex.exec(matchAll);
names.push(match[1]);
born.push(match[2])
})
console.log(names, born)
ha-ha
man-man
check-chick
no-yes
one-two
beb-beb
فرض کنید ، ما میخوایم از متن بالا ، عباراتی رو انتخاب کنیم که بینشون دَش (-) باشه و دو طرف دَش شبیه به هم باشن.
اینجا از گروه بندی و ارجاع به گروه استفاده میکنیم (ارجاع ، یعنی اشاره کردن)
ریجکس زیر رو ببنید:
/(\w+)-\1/img
ha-ha, man-man, beb-beb
خیلی بخوام واضح ریجکس بالا رو توضیح بدم میشه این : عباراتی را پیدا کن که ، اولشون به تعداد 1 الی اِن تا حروف داشته باشه و در ادامه یک دَش قرار بگیره و در آخر همان گروهی که پیدا شده در ادامه دَش وجود داشته باشه.
برای مثال ، ریجکس بالا بدون گروه بندی و ارجاع میشه این :
/\w+-\w+/img
Site : Regex
#regex #regular_expression
#regex_7
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡14❤🔥3🔥3
دیباگ کردن کد Regex 🆒
💬 یکم قبل تر ، آموزش رجکس گذاشتیم و بعضی دوستان میگفتن رجکس بخاطر باگ یابی سختش، استفاده نمیشه...
ℹ️ سایت Regex101 یه ابزار خیلی باحال و آنلاین برای ساخت و تست عبارات منظم (Regular Expressions) هست.میتونی توش ریجکسهات رو بنویسی و همون لحظه نتیجهش رو ببینی. توضیحات واضحی هم درباره هر بخش از ریجکس میده که کارت رو خیلی راحتتر میکنه. خلاصه، اگه با ریجکس سر و کار داری، حتماً بهش سر بزن!
#regex
☕️ @CodeExplore
#regex
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡11🔥3❤🔥2
قبلا با d\ و w\ آشنا شدید و نیازی نمیبینم دوباره تکرارش کنم
بزارید مثل همیشه یه متن اینجا بزارم و روی اون چنتا دسته کارکتر تست کنیم:
Toyota Corolla
Ford Raptor
Audi A3
Honda Civic
dodge challenger
BMW M6
peugeot pars 1389
roox TU5 $mark
دسته کارکتر w\ برای حروف انگلیسی - اعداد و علامت آندلاین بود ، حالا دسته کارکتر W\ دقیقا برعکس بالایی عمل میکنه (یعنی هرچیزی رو قبول میکنه، جز حروف ، اعداد و علامت آندلاین)
/\W/img
, , , , , , , , , , , , , $
/\D/img
همه حروف و علامت ها و فضای خالی به جز اعداد
دسته کارکتر جدیدی که میخوام بهتون بگم ، s\ که فقط فضاهای خالی رو در نظر میگیره (هر نوع فضایی، مثل اینتر یا اسپیس)
و برعکس همین رو هم داریم که میشه ، S\ که هرچیزی رو قبول میکنه ، جز فضای خالی.
/\s/img
هر نوع فضای خالی
/\S/img
همه چیز ، به جز فضاهای خالی
دسته کارکتر بعدی t\ که معنیه tab رو میده و اگه توی متن از tab استفاده بشه ، با تَب ها مطابقت داره
قبلا در مورد نماد ^ صحبت کردیم ، اما گفته بودم که فقط برای مشخص کردن اول جمله به کار نمیاد!
یکی دیگه از کاربر های ^ توی براکت ها مشخص میشه:
فرض کنید همچین ریجکسی داریم:
/[a-c]+/img
/[^a-c]/img
نماد ^ توی براکت ها، معکوس سازی رو انجام میده
دسته کارکتر s\ به صورت براکتی میشه :
/[\r\n\t\f\v]/img
دسته کارکتر S\ هم به صورت براکتی میشه:
/[^\r\n\t\f\v]/img
یعنی ، با یدونه ^ ، همه چی رو معکوس کردیم.
حالا شما برای من تو کامنت دسته های d\ و D\ و W\ رو به صورت براکتی بنویسید :)
روز خوبی داشته باشید
#regex #regular_expression
#regex_8
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡11🔥5❤🔥4
امروز آخرین مورد رو در ریجکس کار میکنیم و شما را به خدای بزرگ میسپاریم
pen: 1 rial
drug: 2 rial
paper: 3 rial
cake: 4 £
car: 5 $
/\d+ rial/img
1 rial, 2 rial, 3 rial
اینجاست که ریجکس یه نماد دیگه رو معرفی میکنه برای حل مشکل و اون نماد اینه: (=?)
قبل از توضیح بزارید ریجکسشو بنویسم:
/\d+(?= rial)/img
1, 2, 3
حالا فرض کنید میخوایم اعدادی رو بدست بیاریم که بعدشون rial نباشه (فقط میدونیم بعدشون ریال نیست ، و ممکنه هرچیزی بعدشون باشه)
/\d(?! rial)/img
4, 5
بیاید متنو یه تغییری بدیم و اینارم تست کنیم :
13 05 1381
17 02 1380
22 03 1386
11 11 1380
پس اگه بخوایم فارسی ریجکس بنویسیم میگیم: دنبال اعدادی 2 رقمی بگرد که قبلشون یه عدد 2 رقمی دیگه باشه.
ریجکسش میشه این:
/(?<=\d{2} )\d{2} /img
05 , 02 , 03 , 11
نماد بعدی هم به این صورته : (!>?) که معنی فارسیش میشه ، دنبال چیز بگرد که بعد از فلان چیز قرار نگرفته باشه!
برای این مثال نمیزنم و میخوام خودتون توی کامنت یه متن و یه ریجکس بنویسید که از نماد آخری استفاده کنه
آموزش ریجکس ما همینجا به پایان میرسه
روز خوبی داشته باشید و برای یادگیری تمرین کنید :)
من بازم 2 تا سایت قبلی رو معرفی میکنم
که میتونید با جفتش ریجکس رو یاد بگیرید و تمرین کنید :
site 1
site 2
#regex #regular_expression
#regex_9 #regex_end
Please open Telegram to view this post
VIEW IN TELEGRAM
Regexlearn
Regex 101 - FA
در این آموزش می توانید اصول ریجکس را بیاموزید.
⚡7❤🔥4🔥4
خب دوستان قراره امروز چنتا مثال فقط حل کنیم تا ریجکس یکم بیشتر دستمون بیاد :)
برای اینکه مثالامون واقعی تر باشه هم از مواردی استفاده میکنم که قبلا استفاده کردم ، یا توی ریجکس خیلی پر استفاده است.
/(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)/img
ریجکس بالا یه مدل ساده از ولیدیشن ایمیله! و مدل های بهتری هم هست که ولیدیشن با فیلتر رو پیاده سازی کنه!
/<img .*\s*.*>/img
/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/img
چون میخوام خودتون برای خودتون توضیح بدید و درک کنید که دقیقا چه اتفاقی افتاده.
توی کامنت برام مثال بزنید، یا کاربرد های دیگشو بگید (یا اگه ریجکس چیزی رو مطمئن نیستید بیاید با هم ریجکسشو پیدا کنیم)
روز خوبی داشته باشید
#regex #regular_expression
#regex_10 #regex_example
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡9🔥5❤🔥3