صفحه 1 از 3 123 آخرآخر
نمایش نتایج 1 تا 40 از 87

نام تاپیک: استفاده از Regular Expressions یا به اختصار RegEx برای جستجو و جایگذاری عبارت در متن

  1. #1
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    استفاده از Regular Expressions یا به اختصار RegEx برای جستجو و جایگذاری عبارت در متن

    با سلام
    در این تاپیک ان شاءالله سعی خواهیم کرد در خصوص عبارت Regular Expressions که به اختصار RegEx نامیده میشه مطالبی رو ارائه نمائیم .
    البته پیشاپیش یادآوری کنم که بنده شخصاً بواسطه گستردگی ای که در پترن های این آبجکت وجود داره در کد نویسی ها خیلی سراغ استفاده از این آبجکت نرفته ام و به همین خاطر باید عرض کنم که تسلط و میزان آشنائی بنده نسبت به این موضوع ناچیزه . به همین خاطر از دوستان با تجربه ای که در این زمینه اطلاعات مفیدی دارن خواهش میکنم در صورت تمایل در ادامه مباحث این تاپیک با ما همراه باشن !
    ضمناً لازمه یادآوری کنم که برای استفاده از آبجکت فوق نیاز به انتخاب رفرنس های مشخص شده در تصویر زیر میباشه و یا اون رو بصورت زیر با استفاده از تابع Create-object در ابتدای کدها معرفی و ایجاد نمائیم

    Dim objRegExp
    Set objRegExp = CreateObject("VBScript.RegExp")

    1.PNG

    و اما توضیح مختصری که در رابطه با Regular Expressions یا بطور اختصار RegEx لازمه بعنوان مقدمه ارائه بشه :
    ترجمه فارسی Regular Expressions میشه عبارات با قاعده یا منظم
    به طور ساده ، RegEx رشته هایی هستن که برای انجام عملیات تطابق و جایگذاری عبارات در رشته استفاده میشه. به عبارتی ما از RegEx برای دو منظور استفاده می کنیم :
    ۱- جستجوی عبارات در متن
    ۲- جستجو و جایگزاری عبارت در متن
    فعلاً برای پست اول به همین مقدار توضیحاتی که ارائه شد بسنده می کنم تا ان شاءالله در پست های بعد همراه با مثال با این آبجکت و کاربردهای اون بیشتر آشنا بشیم
    ....

  2. #2
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    سهواً در عنوان تاپیک بجای کلمه اختصار اخصار تایپ نموده ام که از این بابت عذرخواهی می کنم

  3. #3
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    آشنائی با کاراکتر های مورد استفاده در RegEx در جدول زیر:
    Regex1.png

  4. #4
    کاربر دائمی
    تاریخ عضویت
    آذر 1384
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره -فکر- هوا- عشق- زمین مال من است.
    پست
    997

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    دستتون درد نکنه جناب بهرامی عزیز
    در متون فارسی هم کارایی داره ؟

  5. #5
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    مطالعه متن زیر به ما کمک میکنه که شناخت و درک بهتری نسیت به استفاده و بکارگیری این ابزار در داده های متنی پیدا کنیم :
    عبارات با قاعده یا Regular Expression (RegEx)، ابزاری برای جستجو و تطبیق الگوها در متن است که به ما این امکان را می‌دهد که به سادگی تمام عبارات از داخل متن که الگوهای مشخصی مثل شماره تلفن، شماره کارت و … دارند را استخراج کرده، تغییر دهیم یا روی آن پردازش انجام دهیم.
    از RegEx می‌توان برای تأیید و اعتبارسنجی الگوهای خاص مثل ایمیل، شماره همراه، شماره کارت، کد ملی و … در ورودی کاربر استفاده کرد. به عنوان مثال، در یک متن می‌توانیم خیلی راحت تمام ایمیل‌های کاربران را به تفکیک استخراج کنیم و برای آنها ایمیل تبلیغاتی ارسال کنیم. یا شماره تلفن های یک سایت را استخراج و ذخیره کرده و یا اینکه هر شماره کارتی که کاربر در متن دیدگاه‌ها ارسال کرده را تشخیص و به جای نمایش کامل، آن را ستاره دار نمایش دهیم. و کلی کارهای جالب دیگر مثل تبدیل تمام تاریخ های میلادی به شمسی در داخل متن، لینک کردن شناسه کاربری که داخل متن منشن شده و …


    پس نتیجه می گیریم اولاً، این ابزار به ما امکان می‌ده تا به‌طور کارآمدتری با داده‌های متنی کار کنیم. ثانیاً، آموزش regex یا عبارات با قاعده میتونه باعث صرفه‌جویی در زمان کد نویسی ما بشه ، چرا که میتونیم با بکارگیری این ابزار کارهای پیچیده‌ای مانند اعتبارسنجی و تجزیه داده‌ها را با استفاده از یک خط کد براحتی انجام بدیم
    شاید بدون استفاده از این ابزار هم بشه از راه های دیگه مواردی که در متن بالا به اون ها اشاره شد انجام داد اما طبق تجربه بسیار امکان داره که استفاده از راههای دیگه نیازمند نوشتن کدهای زیادتر و به تبع صرف زمان بیشتری باشه. بنابراین استفاده از آبجکت RegEx یا عبارات با قاعده گزینه به مراتب سریع، بهتر و منعطف تری میتونه محسوب بشه

  6. #6
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نقل قول نوشته شده توسط moustafa مشاهده تاپیک
    دستتون درد نکنه جناب بهرامی عزیز
    در متون فارسی هم کارایی داره ؟
    خواهش میکنم
    امتحان نکرده ام ولی به احتمال زیاد در متون فارسی هم باید کارائی داشته باشه .
    ان شاء الله به کمک دوستان در ادامه مثال ها و نمونه های کاربردی اعم از فارسی یا انگلیسی رو بررسی و امتحان می کنیم
    آخرین ویرایش به وسیله eb_1345 : چهارشنبه 02 آبان 1403 در 05:15 صبح

  7. #7
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    فکر کنم به اندازه کافی در مورد RegExp و کاربردهای اون توضیح داده شد و دیگه وقت اون رسیده کاربردهای این آبجکت رو در قالب مثال مشخص نمائیم
    بر روی فرم یک کمند باتن ایجاد کنید و کدهای زیر رو در رویداد کلیک اون قرار بدهید :
    Dim regx
    Set regx = CreateObject("VBScript.RegExp")
    regx.Pattern = "vba"
    MsgBox regx.Test("vba is my language")

    در دو خط ابتدائی همونطور که مشخصه آبجکت RegExp معرفی و ایجاد شده.
    و اما در مقابل regx.Pattern که مهمترین و حساس ترین قسمت RegExp میباشه باید یک عبارت منظم و باقاعده بعنوان پترن یا الگو ایجاد کنیم که بر اساس ساختاری که برای اون در نظر می گیرم عملیات جستجو و تطبیق رشته یا متن مورد نظرمون صورت بگیره تا یک خروجی به ما ارائه بشه
    کاراکترهائی که در تصویر جدول پست 3 مشاهده می کنین بر اساس قاعده خاص خودشون در قسمت Pattern این آبجت بکار میرن
    در نهایت نتیجه جستجو و تطبیق رشته با الگو بعنوان خروجی در کد خط آخر در دو حالت True یا False مشخص میشه.
    در مثال فوق باید متن یا رشته مورد نظرمون رو در قسمت Text آبجکت وارد بشه . ما در این قسمت متن vba is my language وارد کرده ایم و در قسمت پترن هم عبارت vba . این یعنی اینکه ما از آبجکت RegExp میخوایم بره توی متن vba is my language بگرده و جستجو کنه که آیا سه حرف متوالی vba بر اساس قاعده و ساختاری که برای عبارت پترن در نظر گرفته ایم در متن فوق وجود داره یا نه و نتیجه رو با True یا False نمایش بده
    ببخشین دوستان داره اذان پخش میشه ، اگه ریا نباشه من فعلاً برم نمازمو بخونم

  8. #8
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    در پست قبل برای عبارت پترن قاعده و ساختار خاصی بکار نبرده بودیم و خروجی هم True بود ، چون سه حرف متوالی vba در متن vba is my language وجود داشت
    حالا ما ی کوچلو ساختار پترن مثال قبل رو تغییر میدم . بدینصورت که میایم vba رو بصورت حروف بزرگ درج میکنیم و خروجی میگیریم. می بینیم که در این حالت نتیجه بصورت false نمایش داده میشه . چون vba با حرف بزرگ در متن وجود نداره
    پس ما اگه میخواهیم عبارت الگو به بزرگ و کوچک بودن حروف حساس نباشه میایم خصوصیت IgnoreCase آبجکت رو در حالت True قرار میدیم. یعنی نادیده گرفتن حساسیت به حروف کوچک و بزرگ
    بنابراین با اضافه نمودن خصوصیت فوق کدها بصورت زیر تغییر میکنه :

    Dim regx
    Set regx = CreateObject("VBScript.RegExp")
    regx.IgnoreCase = True
    regx.Pattern = "VBA"
    MsgBox regx.Test("vba is my language")

    خروجی این حالات هم True میباشه چون خصوصیت IgnoreCase (حساسیت به حروف کوچک و بزرگ) رو در حالت True قرار دادیم
    ناگفته نمونه قواعد RegExp ممکنه در همه زبان یکی نباشه . مثلاً در php برای حساس نبودن به حروف کوچک و بزرگ در آخر عبارت پترن حرف i بعد از اسلش دوم اضافه می کنیم

    در مثال بعد بجای متن vba is my language متن absvbanbk جایگزین می کنیم ,
    در اینجا با همون قاعده پترن قبلی میخوایم در متن absvbanbk جستجو بشه که آیا در این متن سه حرف پشت سرهم vba وجود داره یه نه
    در اینجا هم اگه خروجی بگیریم نتیجه True میباشه ، چون تطبیق وجود داره
    در همین مثال اگه بجای حروف از عدد هم استفاده کنین فرقی نداره همون قاعده برای متن عددی هم برقراره

  9. #9
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    در مثال این پست میخوایم از علامت یا نماد dot یا نقطه . در عبارت پترن استفاده کنیم
    متن یا رشته رو معادل همون متن قبلی vba is my language قرار میدیم و عبارت پترن هم معادل v.b
    همونطور که در جدول تصویر پست 3 توضیح داده شده نماد dot یا نقطه به معنی هر کاراکتری میباشه .طبق قاعده پترن این مثال خواسته میشه که در vba is my language جستجو بشه و سه حرف ( در هرجای ) متن پیدا کنه که با v شروع بشه و با a هم ختم بشه وسط این دو حرف هم هرچی میخواد باشه
    کدهای مثال جدید:

    Dim regx
    Set regx = CreateObject("VBScript.RegExp")
    regx.Pattern = "v.a"
    MsgBox regx.Test("vba is my language")

    خروجی مثال جدید هم True میباشه چون چنین کلمه سه حرفی ای که همون حروف vba میباشه در متن وجود داره
    بدیهیست در مثال فوق اگه دنبال کلمه 4 حرفی یا بیشتر بودیم و حرف اول و آخرش مشخص بود باید معادل بقیه حرف نقطه بذاریم مثلاً برای جستجوی حروف 4 حرفی از v..a در قاعده پترن باید استفاده کنیم.

    در مثال بعدی میخوایم از نماد یا علامت hat یا توان ^ در عبارت پترن استفاده کنیم
    در اینجا هم متن یا رشته رو معادل همون متن قبلی vba is my language قرار میدیم و عبارت پترن هم معادل vba ^
    همونطور که در جدول تصویر پست 3 توضیح داده شده علامت توان یا ^ به معنی اینه که متن ما با حرف یا کلمه یا جمله ای که در عبارت پترن بعد از علامت توان^ درج شده شروع بشه .

    Dim regx
    Set regx = CreateObject("VBScript.RegExp")
    regx.Pattern = "^vba"
    MsgBox regx.Test("vba is my language")

    خروجی این مثال هم True میباشه چون طبق قاعده پترن که تعیین کرده ایم بعد علامت توان ^ متن باید با حروف vba شروع بشه می بینیم همینطوری هم هست متن با این سه حرف شروع شده
    حالا در همین مثال اگه در عبارت پترن بجای vba^ از vba is^ هم استفاده کنیم باز هم خروجی این مثال True میباشه چون متن ما با vba is^ هم شروع شده

  10. #10
    کاربر دائمی
    تاریخ عضویت
    آبان 1397
    محل زندگی
    شیراز
    پست
    333

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    با سلام و احترام
    استاد گرانقدر
    بسیار مطلب آموزنده و خوبی بود
    ممنون

  11. #11
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    در مثال این پست از علامت یا نماد Dollar یا $ در عبارت پترن استفاده میکنیم
    متن یا رشته رو معادل همون متن قبلی vba is my language قرار میدیم و عبارت پترن هم معادل $language
    در جدول تصویر پست 3 اشاره شده که علامت یا نماد Dollar یا $ به معنی نقطه پایان رشته میباشه . قاعده پترن این مثال این است که متن vba is my language با کلمه language خاتمه پیدا کنه
    کدهای این مثال:

    Dim regx
    Set regx = CreateObject("VBScript.RegExp")
    regx.Pattern = "language$"
    MsgBox regx.Test("vba is my language")

    مسلماً مقدار خروجی این مثال true میباشه چون متن فوق مطابق قاعده پترن با کلمه language خاتمه پیدا کرده
    مجدداً یادآوری میکنم که در عبارت پترن بجای کلمه میتونه یک حرف یا یک جمله هم قرار بگیره



    در مثال بعدی از علامت یا نماد آکولاد باز و بسته یا {} در عبارت پترن استفاده میکنیم
    متن یا رشته رو معادل همون متن قبلی vba is my language قرار میدیم و عبارت پترن هم معادل my{1,2}
    در عبارت پترن علامت آکولاد باز و بسته یا {} تعداد کاراکتر رو مشخص میکنه . بر اساس قاعده این پترن در متن دو کلمه جستجو میشه که حرف آخر این دو حرف یعنی y یکبار تا دو بار پشت سرهم تکرار شده باشه .
    مقدار خروجی در این مثال true میباشه چون حرفy در محدود 1 تا 2 حداقل یکبار پشت سر هم تکرار شده . ما اگه بجای عدد دوم که 2 است هم عدد 1 قرار بدیم هم هر عدد بزرگتر از 2 بازهم مقدار خروجی true میباشه ، چون در تمام این محدوده ها حرف حرفy حداقل یکبار تکرار شده
    در همین مثال که در خصوص نماد باز و بسته آکولاد یا {} توضیح داده میشه اگه عدد دوم داخل آکولاد خالی باشه به معنی یا بیشتر میباشه . مثلا در همین مثال اگه عبارت پترن رو بصورت my{1,} قرار بدیم باز مقدار خروجی true میشه
    کد های این مثال :

    Dim regx
    Set regx = CreateObject("VBScript.RegExp")
    regx.Pattern = "my{1,2}"
    MsgBox regx.Test("vba is my language")

    یا

    Dim regx
    Set regx = CreateObject("VBScript.RegExp")
    regx.Pattern = "my{1,}"
    MsgBox regx.Test("vba is my language")


    در ارتباط با کاربرد نماد باز و بسته آکولاد یا {} در عبارت پترن یک حالت دیگه وجود داره و اون اینکه در داخل آکولاد فقط یک عدد داشته باشم مثل {2} . این حالت برای زمانیست که بخواهیم تکرار حرف آخر کلمه قبل از آکولاد فقط به تعداد عدد داخل آکولاد تکرار بشه
    آخرین ویرایش به وسیله eb_1345 : چهارشنبه 02 آبان 1403 در 19:49 عصر

  12. #12
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    دوستان عنایت داشته باشن در مثال هامون فعلاً هر کدوم از نماد ها رو در عبارت پترن بصورت تکی استفاده می کنیم تا بعداً ان شاءالله بصورت ترکیبی از اونها استفاده کنیم . فعلاً برای اینکه قاطی نکنیم بهتره کاربرد هر کدومشونو به تنهائی یاد بگیریم تا یواش یواش ملکه ذهنمون بشه و بعداً اونا رو با همدیگه بکار ببریم

  13. #13
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    از این پست به بعد سعی میکنم مطالب رو تا حد امکان خلاصه و بدون کد نویسی مطرح کنم و توضیحات اضافه و کد نویسی رو موکول میکنم به زمانی که در ارتباط با موضوع مورد ابهام سوالی پرسیده شود .

    علامت Plus یا +
    اگه در عبارت پترن مثلاً +a بود بدین معنیه که حرف a حداقل یکبار در متن تکرار شده باشه یا مثلا اگه عبارت متن بصورت +abc بود بدین معنیه که اگه در متن کلمه سه کاراکتری abc وجود داشت کاراکتر c اون میتونه یک یا چند بار تکرار بشه . مثلا حروف abc میتونه بصورت abccccc هم در متن باشه و قابل تطبیقه

    علامت Star یا ستاره
    اگه در عبارت پترن مثلاً *k بود بدین معنیه که حرف k میتونه نباشه یا اگه بود میتونه یک یا چند بار در متن تکرار بشه . بفرض متن ما vba is my language میباشه و می بینیم که حرف k در این متن نیست . در این حالت قاعده پترن درسته و خروجی هم true میباشه. یا مثلاً اگه عبارت پترن بصورت *abc بود معنیش اینه که در متن دو حرف ab باید باشه ولی اگه حرف c وجود هم نداشت مشکلی نیست و اگه هست میتونه یک یا چند بار تکرار بشه . در این حالت قاعده *abc برای ab یا abc یا abccccccccc در متن مطابقت داره

    علامت optional یا ?
    علامت ؟ به معنی اختیاری بودن می باشه
    اگه در عبارت پترن مثلاً ؟k بود بدین معنیه که حرف k میتونه در متن هم باشه هم نباشه . یا مثلاً اگه عبارت پترن بصورت ؟abc بود معنیش اینه که در متن دو حرف ab باید باشه ولی حرف c هم میتونه در کنار این دو حرف هم باشه هم نباشه . در این حالت قاعده ؟abc برای رشته ab یا abc در متن صادقه . یا در عبارت
    4?123 شامل عددهای1234 و 124 میشه

  14. #14
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نقل قول نوشته شده توسط eb_1345 مشاهده تاپیک
    بنظرم برای استفاده از RegEx یا (Regular Expressions) بمنظور انجام عملیات تطابق و جایگذاری عبارات در رشته ها بواسطه قواعد خاص و استفاده از نمادها و دستورات مخصوصی که در اون وجود داره نیاز به یک آموزش در یک تاپیک مستقل داره
    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    خود ابجکت regexp ساده است و پراپرتی ها و متدهاش خیلی کم و سرراستن.
    قسمت سختش نوشتن اون پترن هست که بدبختانه آموزش برنمیداره بس که گسترده است
    و خیلی راحت میشه یک پترن بد نوشت که فشار به پردازنده بیاره یا کلا تو لوپ بیفته!
    قبل از ایجاد این تاپیک آموزشی در تاپیک : تشخیص فیلدی که داده های آن از چندین space تشکیل شده بنده پیشنهاد ایجاد یک تاپیک آموزشی در ارتباط با Regular Expressions نمودم که جناب استاد مازولاق با توجه به تجربه ای که از قبل در این زمینه داشته ان اظهار نمودن که مقوله Regular Expressions بلحاظ گستردگی زیاد پترن های اون آموزش بردار نیست ( نقل قول بالا) ولی بنده بخاطر شناخت و اطلاعات مختصری که در این مورد داشتم تصور کردم برای این موضوع میشه یک تاپیک آموزشی ایجاد کرد . ولی طی این یکی دو روز اخیر کاملاً متوجه گستردگی ای که پترن های این آبجکت داره و استاد بدرستی به اون اشاره داشتن شدم .

  15. #15
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    72
    پست
    3,578

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نقل قول نوشته شده توسط eb_1345 مشاهده تاپیک
    قبل از ایجاد این تاپیک آموزشی در تاپیک : تشخیص فیلدی که داده های آن از چندین space تشکیل شده بنده پیشنهاد ایجاد یک تاپیک آموزشی در ارتباط با Regular Expressions نمودم که جناب مازولاق با توجه به تجربه ای که از قبل در این زمینه داشته ان اظهار نمودن که مقوله Regular Expressions بلحاظ گستردگی زیاد پترن های اون آموزش بردار نیست ( نقل قول بالا) ولی بنده بخاطر شناخت و اطلاعات مختصری که در این مورد داشتم تصور کردم برای این موضوع میشه یک تاپیک آموزشی ایجاد کرد . ولی طی این یکی دو روز اخیر کاملاً متوجه گستردگی ای که پترن های این آبجکت داره و ایشون بدرستی به اون اشاره داشتن شدم .
    من به نوبه خودم بابت این تاپیک مفید تشکر میکنم.
    به نظرم مقصود حاصل و نکات کلیدی بسیاری روشن شده.
    مواردی که میبایست با صرف وقت زیاد و گشتن در سایت های مختلف (و خواندن متن های گنگ) بهش میرسیدیم،
    اینجا با زبانی روان بیان شد که راه رو هموار میکنه.

    البته که اموزش امر دائمی و مستمر هست،
    در مورد regexp هر مسئله (نه ساده اش) میتونه یک چالش باشه و راستش حتی تجربه پرباری از طراحی پترن هم ممکنه کمکی نکنه!
    خوشبختانه برای کارهای روتین و متداول بیشتر پترن ها مشخص و آماده هست و کتابخانه های خوبی از این پترن ها پیدا میشه.
    طراحی پترن بخش بیشترش یک هنر هست، شما ممکنه کار با قلم مو و رنگ و چکش و قلم رو به کسی بتونین یاد بدین -
    ولی نقاشی و مجسمه سازی رو نمیشه یاد داد مگر این که یک استعدادی هم باشه.

    در این یکی دو سال اخیر هم در دسترس بودن هوش ساختگی کمک خیلی خوبی هست.

  16. #16
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    72
    پست
    3,578

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    برای این که این تاپیک سودمند ادامه پیدا کنه،
    یک پرسش کاملا عملی رو برای خوانندگان این بحث مطرح میکنم که بتونین میزان یادگیری خودتون رو محک بزنین:

    یک پترن برای بررسی درست بودن تاریخ خورشیدی طراحی کنین:
    1- فرمت YYYY/MM/DD
    2- محدوده مجاز سال از 1300 تا 1499
    3- محدوده مجاز ماه از 01 تا 12
    4- محدوده مجاز روز ماه از 01 تا 31 برای 6 ماه اول سال
    5- محدوده مجاز روز ماه از 01 تا 30 برای ماه از 07 تا 11
    6- محدوده مجاز روز ماه از 01 تا 29 برای ماه 12 (کبیسه نداریم)

  17. #17
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    من به نوبه خودم بابت این تاپیک مفید تشکر میکنم.
    به نظرم مقصود حاصل و نکات کلیدی بسیاری روشن شده.
    مواردی که میبایست با صرف وقت زیاد و گشتن در سایت های مختلف (و خواندن متن های گنگ) بهش میرسیدیم،
    اینجا با زبانی روان بیان شد که راه رو هموار میکنه.

    البته که اموزش امر دائمی و مستمر هست،
    در مورد regexp هر مسئله (نه ساده اش) میتونه یک چالش باشه و راستش حتی تجربه پرباری از طراحی پترن هم ممکنه کمکی نکنه!
    خوشبختانه برای کارهای روتین و متداول بیشتر پترن ها مشخص و آماده هست و کتابخانه های خوبی از این پترن ها پیدا میشه.
    طراحی پترن بخش بیشترش یک هنر هست، شما ممکنه کار با قلم مو و رنگ و چکش و قلم رو به کسی بتونین یاد بدین -
    ولی نقاشی و مجسمه سازی رو نمیشه یاد داد مگر این که یک استعدادی هم باشه.

    در این یکی دو سال اخیر هم در دسترس بودن هوش ساختگی کمک خیلی خوبی هست.
    سلام و عرض ارادت خدمت دوست و استاد گرامی جناب آقای مازولاق عزیز !
    از لطف و محبت همیشگی شما بسیار سپاسگزارم
    همونطور که قبلاً هم در یکی از تاپیک ها خدمتتون عرض کردم بنده خیلی حال و حوصله ایجاد تاپیک های آموزشی ندارم . چون واقعاً معتقدم کسی که اقدام به ایجاد یک تاپیک آموزشی می کنه باید از زوایای مختلف اشراف و تسلط بالائی در خصوص موضوع مورد آموزش داشته باشه که بنده شخصاً چنین توانائی و تسلطی بخصوص از نظر تئوری در مباحث آموزشی ندارم .
    راستش این تاپیک آموزشی هم که ایجاد کردم مطمئن بودم شما مثل همیشه در کنارمون خواهید بود و عیب و ایرادهای کارمون رو بهمون گوشزد می کنی
    و اما در خصوص ادامه مطالب آموزشی این تاپیک ، امروز با خودم فکر کردم که اگه به همین منوال این بحث آموزش رو ادامه بدم و در هر پستی در خصوص دوسه نوع از نمادها مطلب بنویسم و مثال بزنم تعداد پست ها بواسطه گستردگی مطلب خیلی زیاد میشه و در نهایت خیلی از دوستانی که علاقمند به این بحث آموزشی هستن خسته بشن و در نهایت چیزی هم دستگیرشون نشه.از طرفی بفکر روشی بودم که بهتر و راحتتر بشه قواعد کار با آبجکت RegExp رو یاد گرفت.
    در همین راستا ایده ای به ذهنم خطور کرد و برای عملی نمودن اون دست بکار شدم . ایده مربوطه این بود که بیائیم این مطالب آموزشی رو با مثال های مختلف و متنوع بصورت یک برنامه در اکسس پیاده سازی کنیم بطوریکه در این برنامه امکان جستجوی علائم با توضیحات و مثال های مربوط به هر علامت یا نماد وجود داشته باشه و در فرمی دیگر هم همزمان امکان تست الگوی RegExp مورد نظرمون فراهم کنیم .
    برنامه ضمیمه حاصل تلاش سه چهار ساعته امروز بنده برای عملی نمودن این ایده می باشه .
    به نظر خودم خوبی استفاده از این ایده و روش اینه که در فرم اصلی میتوان هر کدوم از علائم مورد استفاده در پترن رو جستجو کرد ، در کادر توضیح علامت با کاربردهای اون علامت آشنائی پیدا کرد و درقسمت سابفرم هم با مشاهده مثال های مختلف (که به مرور به اون اضافه میشه) با کاربرد علامت مربوطه در الگوهای مختلف آشنا شد. در کل بجای جستجوی کاربرد یک علامت در الگوهای RegExp در جاهای مختلف ، از طریق این برنامه میشه موارد مورد نیاز رو در یک صفحه مشاهده کرد.
    ان شاءالله با کمک های جنابعالی بتونیم یک رنگ و بوی حرفه ای به این برنامه بدیم که قابل استفاده برای همه دوستان بخصوص علاقمندان به فراگیری مقوله Regular Expressions باشه
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله eb_1345 : یک شنبه 06 آبان 1403 در 11:49 صبح

  18. #18
    کاربر دائمی
    تاریخ عضویت
    آذر 1384
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره -فکر- هوا- عشق- زمین مال من است.
    پست
    997

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    عرض سلام وادب جناب بهرامی عزیز
    واقعا دستتون درد نکنه از این همه وقت وانرژی که میذارین و حوصله ای که به خرج میدین . اجرکم عندالله
    آخرین ویرایش به وسیله moustafa : جمعه 04 آبان 1403 در 17:30 عصر

  19. #19
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نقل قول نوشته شده توسط moustafa مشاهده تاپیک
    عرض سلام وادب جناب بهرامی عزیز
    واقعا دستتون درد نکنه از این همه وقت وانرژی که میذارین و حوصله ای که به خرج میدین . اجرکم عندالله
    ممنون !
    دوران بازنشستگی رو یجوری باید سر خودمونو گرم کنیم دیگه .
    آخرین ویرایش به وسیله eb_1345 : شنبه 05 آبان 1403 در 11:55 صبح

  20. #20
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    یک لیست باکس برای نمایش رشته های تطبیق داده شده به نمونه پست 17 اضافه کردم . لطفاً بررسی و اظهار نظر فرمائید!

  21. #21
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    ان شاءالله نمونه پترن های مربوط به هر علامت به مرور به برنامه اضافه میشه !

  22. #22
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    اگه بشه میخوام در برنامه نمونه این خاصیت رو به فرم تست الگو اضافه کنم که وقتی عبارتی در الگو وارد میشه علاوه بر اعلام مطابقت داشتن یا نداشتن عبارت الگو و نمایش رشته در لیست باکس پائین فرم ، عبارت مربوطه رو در متن سلکت و هایلایت کنه . این خصوصیت برای جستجو در متن های طولانی خیلی بدرد بخوره
    شرط ابتدائی اجرای چنین حالتی اینه که خصوصیت Text Format تکست باکس متن در حالت Rich Text باشه
    HighLight.png
    آخرین ویرایش به وسیله eb_1345 : شنبه 05 آبان 1403 در 22:55 عصر

  23. #23
    کاربر دائمی
    تاریخ عضویت
    آبان 1397
    محل زندگی
    شیراز
    پست
    333

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    با سلام و احترام
    استاد گرامی
    ابتدا ممنون از آموزش بسیار مفید شما
    در صورت امکان در پست قبلی تعداد پیدا شده از الگو را هم در قالب یک پیغام و یا تکست باکس نمایش دهد
    به طور مثال 25 حرف a پیدا شده است

  24. #24
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نقل قول نوشته شده توسط محمد رضا بهبودی مشاهده تاپیک
    با سلام و احترام
    استاد گرامی
    ابتدا ممنون از آموزش بسیار مفید شما
    در صورت امکان در پست قبلی تعداد پیدا شده از الگو را هم در قالب یک پیغام و یا تکست باکس نمایش دهد
    به طور مثال 25 حرف a پیدا شده است
    سلام جناب آقای بهبودی عزیز!
    وقت بخیر!
    ممنون از لطف شما
    راستش این مورد رو در فرم تست الگو نمونه برنامه امتحان کردم ولی نتیجه مطلوبی حاصل نشد .
    ان شاءالله بعدا سر فرصت روش بیشتر کار می کنم . حالا این مورد خیلی هم مهم نیست، الآن مورد مهمتر موضوع تاپیکه که باید بهش بپردازیم.

  25. #25
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    برای این که این تاپیک سودمند ادامه پیدا کنه،
    یک پرسش کاملا عملی رو برای خوانندگان این بحث مطرح میکنم که بتونین میزان یادگیری خودتون رو محک بزنین:

    یک پترن برای بررسی درست بودن تاریخ خورشیدی طراحی کنین:
    1- فرمت YYYY/MM/DD
    2- محدوده مجاز سال از 1300 تا 1499
    3- محدوده مجاز ماه از 01 تا 12
    4- محدوده مجاز روز ماه از 01 تا 31 برای 6 ماه اول سال
    5- محدوده مجاز روز ماه از 01 تا 30 برای ماه از 07 تا 11
    6- محدوده مجاز روز ماه از 01 تا 29 برای ماه 12 (کبیسه نداریم)
    با توجه به اینکه در پستهای قبل و در برنامه نمونه به اندازه کافی در مورد علائم و نمادهای مورد استفاده در الگوها توضیح داده شده بهتر است از این پست به بعد به مسائل و حل اونها بپردازیم
    فعلاً تاریخ رو از سال 1100 بدون در نظر گرفتن محدوده ها ی فوق بررسی و چک می کنیم تا در صورت درست بودن در پست های بعد محدوده هائی که جناب آقای مازولاق اشاره کرده ان در اون لحاظ کنیم

    تابعی بصورت زیر برای اعتبار سنجی تاریخ ایجاد می کنیم و عبارت الگو رو در اون قرار میدیم:
    Public Function ShamsiDateValid(StrDate As String) As Boolean
    On Error GoTo Error_Handler
    Dim regx
    Set regx = CreateObject("VBScript.RegExp")
    regx.Pattern = "^(\d{4}\/?(0[1-9]|1[012])\/?(0[1-9]|[12][0-9]|3[01]))"
    ShamsiDateValid = regx.Test(StrDate)
    If ShamsiDateValid = False Then
    MsgBox "! فرمت تاريخ اشتباه وارد شده ", vbOKOnly + vbInformation + vbMsgBoxRight, "توجه!"
    'TxtDate.SetFocus
    End If
    Error_Handler:
    If Err.Number > 0 Then MsgBox " خطاي :" & Err.Number & " " & Err.Description
    End Function


    در نهایت بصورت زیر تابع فوق برای مثلا تاریخ ورودی 1401/08/07 فراخوانی می کنیم:

    Call ShamsiDateValid("1401/08/07")

    من در حل سوال توضیح خاصی ندادم چون اگه اینکار رو میکردم چندین خط باید توضیح میدادم و برام خسته کننده بود.
    آخرین ویرایش به وسیله eb_1345 : سه شنبه 08 آبان 1403 در 06:00 صبح

  26. #26
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    دوستان خاطرشون مونده که کاربرد علامت ? درعبارت الگو چی بود ؟
    همونطور که در پست 13 اشاره کردیم علامت ? به معنی اختیاری بودن کاراکتر قبل از خودشه . یعنی اگه یک رشته ورودی بصورت ?/1200 داشته باشیم علامت اسلش / میتونه هم باشه هم نباشه . پس بیائیم با توجه به قاعده این علامت اون رو در عبارت الگوی تاریخ بعد از اسلش اضافه کنیم تا اگر کاربر در هنگام ورود تاریخ از اسلش / هم استفاده نکرد پیغامی صادر نشه.
    با اضافه نمودن علامت فوق عبارت الگو بصورت زیر تبدیل میشه:

    regx.Pattern = "^(\d{4}\/?(0[1-9]|1[012])\/?(0[1-9]|[12][0-9]|3[01]))"
    آخرین ویرایش به وسیله eb_1345 : سه شنبه 08 آبان 1403 در 05:52 صبح

  27. #27
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    72
    پست
    3,578

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    سلام دوباره خدمت جناب بهرامی

    1- پریروز میخواستم براتون چیزی بفرستم، پیام خصوصی شما بسته بود (من هم بستم البته)،
    لطفا یک ایمیل به همین آیدی در یاهو بزنین.

    2- این پترن های پست های 25 و 26 بنظرم درست کار نکنه.

    3- یک اشتباه تایپی هم در نامیدن / به بک اسلش هست - که اسلش درسته.

    4- برای سال از این استفاده کنین (طبق خواسته):
    (13\d\d|14\d\d)


    5- برای ماه هم باید captured group باشه (که بعدا بتونیم مقدار ماه رو بخونیم - مثل سال در مورد 4)
    ولی داخل خودش چند non-captured group نیاز هست برای alternativeها (6 ماه اول و دوم)
    که هر کدوم اینها باز برای روز چند آلترناتیو captured group میخواد.

  28. #28
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    برای این که این تاپیک سودمند ادامه پیدا کنه،
    یک پرسش کاملا عملی رو برای خوانندگان این بحث مطرح میکنم که بتونین میزان یادگیری خودتون رو محک بزنین:

    یک پترن برای بررسی درست بودن تاریخ خورشیدی طراحی کنین:
    1- فرمت YYYY/MM/DD
    2- محدوده مجاز سال از 1300 تا 1499
    3- محدوده مجاز ماه از 01 تا 12
    4- محدوده مجاز روز ماه از 01 تا 31 برای 6 ماه اول سال
    5- محدوده مجاز روز ماه از 01 تا 30 برای ماه از 07 تا 11
    6- محدوده مجاز روز ماه از 01 تا 29 برای ماه 12 (کبیسه نداریم)

    regx.Pattern = "((13|14)([0-9]{2})/?(((0[1-6])/?((0[1-9])|([12][0-9])|(3[0-1])))|(((0[7-9])|(1[0-1]))/?((0[1-9])|([12][0-9])|(30)))|((12)/?((0[1-9])|([12][0-9])|(29)))))"
    آخرین ویرایش به وسیله eb_1345 : سه شنبه 08 آبان 1403 در 07:38 صبح

  29. #29
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    سلام دوباره خدمت جناب بهرامی
    1- پریروز میخواستم براتون چیزی بفرستم، پیام خصوصی شما بسته بود (من هم بستم البته)،
    لطفا یک ایمیل به همین آیدی در یاهو بزنین.
    با عرض سلام متقابل
    دریافت پیام خصوصی رو فعال کردم
    آخرین ویرایش به وسیله eb_1345 : سه شنبه 08 آبان 1403 در 05:29 صبح

  30. #30
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    گاهاً در حال تایپ مطلب در پست جدید هستم که کاری برایم پیش میاد که ممکنه انجامش طول بکشه در این حالت صفحه رو همچنان باز میذارم تا بعداً اون رو ارسال کنم ، در همین زمان ممکنه قبل از ارسال پست شخص دیگری پستی رو ارسال کنه که من متوجه اون نمیشم . مثل پست شماره 27 که در ساعت 1403, 19:12 عصر توسط جناب استاد مازولاق ارسال شده در حالیکه در همین زمان من مشغول انجام کار دیگه بودم و بدون اینکه چک کنم که پست جدیدی ارسال شده یا نه پست خودم رو که زمان ارسالش 1403, 20:49 عصر بوده ارسال نمودم.
    این مطلب رو عرض کردم که یموقع خدای نکرده سوء تفاهمی ایجاد نشه

  31. #31
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نکته :
    همانطور که در مطالب پست های قبل اشاره کردیم برخی از کاراکتر ها در عبارت الگو (پترن) معنی خاصی می دهن و اگه بخواهیم خود اون کاراکترها رو در متن انتخاب نمائیم در عبارت الگو قبل از اون کاراکتر باید یک بک اسلش \ قرار بدهیم
    مثلاً میخواهیم تمام نقطه هائی که در متن میباشه انتخاب بشه باید در عبارت الگو اون رو بصورت .\ قرار بدهیم یا میخواهیم تمام بک اسلش هائی که در متن وجود داره انتخاب بشه در عبارت الگو باید اون رو بصورت \\ قرار بدهیم . برای بقیه کاراکترها به همین صورت عمل می کنیم

    ?\
    *\
    ^\
    &\
    [\
    ]\
    {\
    }\
    )\
    (\

  32. #32
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    72
    پست
    3,578

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نقل قول نوشته شده توسط eb_1345 مشاهده تاپیک

    regx.Pattern = "((13|14)([0-9]{2})/?(((0[1-6])/?((0[1-9])|([12][0-9])|(3[0-1])))|(((0[7-9])|(1[0-1]))/?((0[1-9])|([12][0-9])|(30)))|((12)/?((0[1-9])|([12][0-9])|(29)))))"
    چند نمونه رو تست کردم و بنظر درست میومد،
    و این که / رو optional کردین هم بسیار خوب بود.
    واقعا دست مریزاد.

    اما:
    / اگر optional هست کلا باید اینجوری باشه،
    این پترن در وضعیت فعلی هر کدوم رو به تنهایی درنظر میگیره:
    یعنی 1383/1122 , 138311/22 هم valid هستن.

    مورد بعدی این که الان کلا یک captured group داریم که کل تاریخ رو برمیگردونه،
    و این خودش درونش 24 تا captured group دیگه داره.
    در حالی که باید کلا 3 تا باشه : بخش سال و بخش ماه و بخش روز.

  33. #33
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    72
    پست
    3,578

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نقل قول نوشته شده توسط محمد رضا بهبودی مشاهده تاپیک
    در صورت امکان در پست قبلی تعداد پیدا شده از الگو را هم در قالب یک پیغام و یا تکست باکس نمایش دهد
    به طور مثال 25 حرف a پیدا شده است
    سلام و روز خوش
    شما باید match collection بسازین و length اون رو بخونین.
    یک کد نمونه در پست شماره 39 تاپیک زیر هست:
    تشخیص فیلدی که داده های آن از چندین space تشکیل شده

  34. #34
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    سلام و روز خوش
    شما باید match collection بسازین و length اون رو بخونین.
    یک کد نمونه در پست شماره 39 تاپیک زیر هست:
    تشخیص فیلدی که داده های آن از چندین space تشکیل شده
    سلام و روز شما هم خوش!
    لطفا در مورد فانکشن زیر که برای این مورد ایجاد کرده ام اظهار نظر فرمائین !


    Public Function RegExCountWords(ByVal Text As String, PatternText As String) As Long
    Dim regx
    Set regx = CreateObject("VBScript.RegExp")
    regx.Pattern = PatternText
    regx.Global = True
    RegExCountWords = regx.Execute(Text).Count
    End Function

    در مثال زیر با استفاده از تابع فوق میتوان تعداد کاراکتر o در رشته ورودی رو بدست آورد .

    MsgBox RegExCountWords("www.bahrami125@yahoo.com", "o")

    یا در مثال زیر تعداد کلمه در در رشته ورودی که فارسی هم هست بدست میاد:

    MsgBox RegExCountWords("در مثال زير با استفاده از تابع فوق ميتوان تعداد کاراکتر o در رشته ورودي رو بدست آورد .", "در")

    فکر کنم در متن های چند خطی رشته فارسی هم کاربرد داشته باشه .

    البته در متن انگلیسی برای بدست آوردن تعداد یک کاراکتر یا کلمه خاص در یک متن میتونیم با ترکیب تابع Len و Replace اینکار رو انجام بدهیم
    مثلاً در همون مثال اولی میخواهم تعداد حرف o رو در متن www.bahrami125@yahoo.com ورودی بدست بیاریم. برای اینکار تابع رو بصورت زیر مینویسیم :

    CountWords = Len("www.bahrami125@yahoo.com") - Len(Replace("www.bahrami125@yahoo.com", "o", ""))

    ولی با این کد تعداد در متون فارسی درست بدست نمیاد ولی تابعی که در اون از پترن استفاده شده برای بدست آوردن تعداد در هر دو حالت فارسی و انگلیسی مناسبتره
    آخرین ویرایش به وسیله eb_1345 : سه شنبه 08 آبان 1403 در 22:16 عصر

  35. #35
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    اما:
    / اگر optional هست کلا باید اینجوری باشه،
    این پترن در وضعیت فعلی هر کدوم رو به تنهایی درنظر میگیره:
    یعنی 1383/1122 , 138311/22 هم valid هستن.

    مورد بعدی این که الان کلا یک captured group داریم که کل تاریخ رو برمیگردونه،
    و این خودش درونش 24 تا captured group دیگه داره.
    در حالی که باید کلا 3 تا باشه : بخش سال و بخش ماه و بخش روز.
    با سلام دویاره
    برای رفع ایراد مورد درج علامت اسلش / یا نادیده گرفتن اون در رشته تاریخ میشه در تابع ShamsiDateValid با چک کردن تعداد اسلش ها تاریخ رو اعتبار سنجی کرد
    تعداد گروه ها هم به 6 تا تقلیل پیدا کرد.البته عبارت قسمت سال بدون گروه هم مینونه باشه ولی بنظرم برای خوانائی بیشتر پترن باشه بهتره

    Public Function ShamsiDateValid(Strdate As String) As Boolean
    On Error GoTo Error_Handler
    Dim regx
    Dim Strdt As String
    regx.Pattern = "(13|14[0-9]{2}/?)(0[1-6]/?(0[1-9]|[12][0-9]|3[0-1])|(0[7-9]|1[0-1])/?(0[1-9]|[12][0-9]|30)|12/?(0[1-9]|[12][0-9]))"
    ShamsiDateValid = regx.Test(Strdate)
    If ShamsiDateValid = False Then
    MsgBox "! فرمت تاريخ اشتباه وارد شده ", vbOKOnly + vbInformation + vbMsgBoxRight, "توجه!"
    Exit Function
    ElseIf ShamsiDateValid = True Then
    If Len(Strdate) - Len(Replace(Strdate, "/", "")) = 1 Then
    MsgBox "! فرمت تاريخ اشتباه وارد شده ", vbOKOnly + vbInformation + vbMsgBoxRight, "توجه!"
    Exit Function
    End If
    End If
    Error_Handler:
    If Err.Number > 0 Then MsgBox " خطاي :" & Err.Number & " " & Err.Description
    End Function
    آخرین ویرایش به وسیله eb_1345 : پنج شنبه 10 آبان 1403 در 05:57 صبح

  36. #36
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    نسخه آپدیت شده نمونه برنامه پست 17 در ضمیمه این پست قرار داده شد.
    ضمن اضافه کردن مختصر اطلاعاتی به جدول برنامه نسخه آپدیت شده به لیست باکس مربوط به رشته های تطبیق شده در فرم تست عبارت پترن یا الگو ستون دیگه ای تحت عنوان موقعیت اضافه کردم . در این ستون موقعیت هر رشته تطبیق شده از نقطه شروع تا نقطه پایان اون مشخص میشه به عبارتی دیگه برای هر تطبیق مشخص میشه که از چندمین کاراکتر شروع و در چندمین کاراکتر خاتمه پیدا کرده
    عکس های ضمیمه عکس های ضمیمه
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله eb_1345 : پنج شنبه 10 آبان 1403 در 12:38 عصر

  37. #37
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    در پست شماره 16 جناب آقای مازولاق یک پرسش کاربردی در خصوص اعتبار سنجی تاریخ شمسی (مطابق موارد مورد اشاره در پست فوق) از طریق RegEx مطرح کردن ،در این پست میخواهم به ارزیابی و اعتبار سنجی شماره موبایل (شماره های مختص کشور ایران)با عبارت‌های با قاعده(Regex) بپردازیم
    ساده ترین پترن برای اعتبار سنجی شماره موبایل بدون کد کشور بصورت زیر میباشه :

    ^0?9\d{9}$


    این پترن به ما میگه که اولاً شماره موبایل وارده باید با 09 شروع شود اما بکار بردن 0 اختیاری می باشه دوماً کاراکترهای وارده بعدی (بعد از 9) باید از نوع عدد و تعداد ارقامش هم 9 تا باشه
    در پترن بعدی کد کشور هم لحاظ میشه ولی بصورت اختیاری . یعنی اگه کد کشور هم اضافه نشد شماره وارده اعتبار داره:

    ^(98)?0?9\d{9}$

    در پترن بالا کد کشور ایران که 98 میباشه بصورت گروه تعیین کرده ایم و اون رو بصورت آپشنال قرار داده ایم یعنی با گذاشتن علامت ? بعد از گروه اضافه نمودن اون رو بصورت اختیاری درآورده ایم
    بنابراین با آبشنال (Optional) قرار دادن هم 0 و هم کد کشور(98) درج اونها اختیاریه
    در پترن بعدی علاوه بر درج 0 و کد کشور قبل از شماره موبایل علامت + هم که معمولاً قبل از کد کشور بکار میره اضافه شده ولی بصورت آبشنال یا اختیاری

    ^\+?(98)?0?9\d{9}$

    تابع اعتبار سنجی شماره موبایل:

    Public Function MobailNoValid(StrMobailNo As String) As Boolean
    On Error GoTo Error_Handler
    Dim regx
    Dim Strdt As String
    Set regx = CreateObject("VBScript.RegExp")
    regx.Pattern = "^\+?(98)?0?9\d{9}$"
    MobailNoValid = regx.Test(StrMobailNo)
    If MobailNoValid = False Then
    MsgBox "! شماره موبايل وارده اشتباه مي باشد ", vbOKOnly + vbInformation + vbMsgBoxRight, "توجه!"

    Exit Function
    End If
    Error_Handler:
    If Err.Number > 0 Then MsgBox " خطاي :" & Err.Number & " " & Err.Description
    End Function

  38. #38
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    سن
    58
    پست
    1,057

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    انصافاً اگه در حالت معمول و بدون استفاده از پترن بخواهیم بطور مثال شماره موبایل رو در یک رشته اعتبار سنجی کنیم چند خط کد باید بنویسیم و چقدر زمان صرف کد نویسی کنیم ؟ آیا با نوشتن یک پترن در حد یک خط در کار کد نویسی های چند خطی و زمان کد نویسی اون صرفه جوئی نمیشه ؟

  39. #39
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    72
    پست
    3,578

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    با سلام دویاره
    برای رفع ایراد مورد درج علامت اسلش / یا نادیده گرفتن اون در رشته تاریخ میشه در تابع ShamsiDateValid با چک کردن تعداد اسلش ها تاریخ رو اعتبار سنجی کرد
    تعداد گروه ها هم به 6 تا تقلیل پیدا کرد.البته عبارت قسمت سال بدون گروه هم مینونه باشه ولی بنظرم برای خوانائی بیشتر پترن باشه بهتره
    سلام دوباره و روز خوش
    اگر بخواهیم فقط با یک پترن چک کنیم گاهی پترن خیلی پیچیده میشه،
    که هم نوشتنش سخت و زمانبر هست و هم نگهداریش و دیباگ کردنش.

    ولی اگر از کد هم کمک بگیریم میونیم پروسه رو به بخش های کوچک تری بشکنیم
    که هم نوشتنش و هم نگهداری و دیباگش ساده تر است ،
    و چه بسا پرفورمنس بهتری هم داشته باشه.

    در همین مثال میتونیم اول ساختار کلی تاریخ رو درست بودنش رو بررسی کنیم،
    و بعد اگر ساختار درست بود ادامه بدیم.

  40. #40

    نقل قول: استفاده از Regular Expressions یا به اخصار RegEx برای جستجو و جایگذاری عبارت در متن

    با سلام واحترام ، مطالب بسیار مهم و مفیدی از طرف اساتید محترم مطرح شد از زحمات همگی صمیمانه تشکر وقدر دانی می کنم

صفحه 1 از 3 123 آخرآخر

تاپیک های مشابه

  1. پاسخ: 5
    آخرین پست: سه شنبه 11 فروردین 1394, 13:30 عصر
  2. تولید کد های regular expressions با استفاده از Expresso
    نوشته شده توسط SalarSoft در بخش مقالات مرتبط با Microsoft .Net Framework
    پاسخ: 4
    آخرین پست: سه شنبه 23 مهر 1392, 18:46 عصر
  3. خبر: دانلود کنید : یک EBook مختصر و بسیار مفید برای Regular Expressions
    نوشته شده توسط raziee در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: شنبه 26 شهریور 1390, 00:09 صبح
  4. کاربرد(Regex (Regular Expressions
    نوشته شده توسط meitti در بخش C#‎‎
    پاسخ: 3
    آخرین پست: یک شنبه 13 بهمن 1387, 20:23 عصر
  5. آیا میشه در UrlMappings از Regular Expressions استفاده کرد؟
    نوشته شده توسط web developer در بخش ASP.NET Web Forms
    پاسخ: 6
    آخرین پست: دوشنبه 02 مهر 1386, 11:00 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •