جستجو برای:
سبد خرید 0
  • صفحه اصلی
  • دوره‌های آموزشی
  • وبلاگ
  • درباره ما
  • قوانین و مقررات
  • همکاری با ما
  • تماس با ما
محتوای باز
ورود
[suncode_otp_login_form]
گذرواژه خود را فراموش کرده اید؟
عضویت
[suncode_otp_registration_form]
  • خانه
  • کتاب آنلاین
  • درباره سایت
  • درباره لوگو
  • تماس با ما
محتوای باز
  • صفحه اصلی
  • دوره‌های آموزشی
  • وبلاگ
  • درباره ما
  • قوانین و مقررات
  • همکاری با ما
  • تماس با ما
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0
[wcas-search-form]

شمارش‌گرها (Quantifiers)

12 آذر 1399
ارسال شده توسط فرشید نوتاش حقیقت
خط فرمان، گنو/لینوکس
شمارش‌گرها

عبارات منظم توسعه‌یافته، چندین راه را برای اختصاص تعداد دفعات تطبیق یک عنصر (با استفاده از شمارش‌گرهای مختلف) دارند؛ که به بیان آن‌ها خواهیم پرداخت.

شمارش‌گر علامت سوال (?) – تطبیق یک عنصر، هیچ یا یک مرتبه

شمارش‌گر علامت سوال (?) در اصل بدین معنا است که عنصر قبلی را اختیاری کن. فرض کنید می‌خواهیم اعتبار یک شماره تلفن را بررسی کنیم و در نظر گرفته‌ایم که یک شماره تلفن معتبر بایستی با یکی از این دو فرم مطابقت داشته باشد:

 (nnn) nnn-nnnn

و یا

nnn nnn-nnnn

آن را این‌گونه بیان خواهیم کرد:

^\(?[0-9] [0-9] [0-9]\)? [0-9] [0-9] [0-9]- [0-9] [0-9] [0-9] [0-9]$

نکته‌ای که در این عبارت مورد اهمیت است، این است که کاراکتری که قبل از علامت سوال آمده یعنی () اختیاری است و با این کار می‌توانیم هر دو حالت بالا را بررسی کنیم و هر دو تطبیق داده می‌شوند.

باز هم توجه داشته باشید که از آن‌جایی که پرانتزها در حالت عادی متاکاراکتر هستند (در ERE) آن‌ها را با یک بک‌اسلش همراه می‌کنیم تا به‌عنوان کاراکترهای لیترال رفتار کنند.

مثال:

[me@linuxbox ~]$ echo "(555) 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)? [0-9]
[0-9][0-9]$'
(555) 123-4567
[me@linuxbox ~]$ echo "555 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)? [0-9]
[0-9][0-9]-[0-9][0-9][0-9][0-9]$'
555 123-4567
[me@linuxbox ~]$ echo "AAA 123-4567" | grep -E '^\(?[0-9][0-9][0-9]\)? [0-9]
[0-9][0-9]-[0-9][0-9][0-9][0-9]$'
[me@linuxbox ~]$

در مورد اول، کاراکتر echo شده، دارای پرانتز و در مورد دوم، کارامتر echo شده، بدون پرانتز است و در هر دو صورت به‌دلیل استفاده از شمارش‌گر (?) تطبیق صورت می‌پذیرد. در مورد سوم، به دلیل echo کردن AAA هیچ تطبیقی صورت نمی‌پذیرد.

شمارش‌گر ستاره (*) – تطبیق یک عنصر، هیچ یا چند مرتبه

همانند متاکاراکتر علامت سوال (?)، متاکاراکتر ستاره (*) نیز به‌منظور دلالت بر یک آیتم اختیاری به‌کار می‌رود. هر چند بر خلاف قبلی، این بار یک آیتم می‌تواند تعداد زیادی از دفعات اتفاق بیفتند (نه فقط یک بار).

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

[[:upper:]][[:upper:][:lower:] ]*\.

این عبارت از سه بخش تشکیل شده است: یک براکت که حاوی کلاس کاراکتری [:upper:]، یک براکت حاوی هر دو کلاس کاراکتری [:upper:] و [:lower:] و یک فاصله و یک نقطه که به‌همراه بک‌اسلش نادیده گرفته شده است. این در حالی است که عنصر دومی با متاکاراکتر * همراه شده، در نتیجه پس از حروف بزرگ ابتدایی در جمله، هر تعداد از حروف یزرگ و کوچک و فاصله که قرار بگیرد، باز هم تطبیق صورت می‌پذیرد.

مثال زیر گویای این مطلب است:

[me@linuxbox ~]$ echo "This works." | grep -E '[[:upper:]][[:upper:][:lower:]
]*\.'
This works.
[me@linuxbox ~]$ echo "This Works." | grep -E '[[:upper:]][[:upper:][:lower:]
]*\.'
This Works.
[me@linuxbox ~]$ echo "this does not" | grep -E '[[:upper:]][[:upper:][:lower:
] ]*\.'
[me@linuxbox ~]$

شمارش‌گر علامت جمع (+) – تطبیق یک عنصر، یک یا چند مرتبه

متاکاراکتر (+)، درست مانند (*) عمل می‌کند، با این تفاوت که حداقل به یک نمونه از عنصر قبلی نیاز دارد تا مطابقت صورت پذیرد. در زیر عبارت منظمی که فقط خصوط حاوی گروهی از یک یا چند کاراکتر الفبایی که با فاصله از هم جدا شده‌اند را تطبیق می‌دهد:

^([[:alpha:]]+ ?)+$

در ادامه، آن را امتحان می‌کنیم:

[me@linuxbox ~]$ echo "This that" | grep -E '^([[:alpha:]]+ ?)+$'
This that
[me@linuxbox ~]$ echo "a b c" | grep -E '^([[:alpha:]]+ ?)+$'
a b c
[me@linuxbox ~]$ echo "a b 9" | grep -E '^([[:alpha:]]+ ?)+$'
[me@linuxbox ~]$ echo "abc d" | grep -E '^([[:alpha:]]+ ?)+$'
[me@linuxbox ~]$

می‌بینیم که عبارت “a b 9” مطابقت داده نمی‌شود

؛ چرا که کاراکتر 9 عددی بوده و الفبایی نیست. همچنین عبارت “abc d” نیز مطابقت داده نمی‌شود، زیرا بیش از یم فاصله بین دو کاراکتر وجود دارد.

شمارش‌گر آکولاد {} – تطبیق یک عنصر، به تعداد دفعات تعیین شده

متاکاراکترهای } و { به‌منظور بیان ماکزیمم و مینیمم تعداد دفعات مورد نیاز تطبیق، استفاده می‌شوند. آن‌ها را می‌توان به چهار شیوه مختلف به‌کار گرفت که در جدول زیر مشاهده می‌کنید:

تعیین‌کنندهعملکرد
{n}تطبیق عنصر قبلی اگر دقیقا n بار اتفاق بیفتد.
{n,m}تطبیق عنصر قبلی اگر حداقل n بار اتفاق بیفتد ولی از m بار بیشتر رخ ندهد.
{n,}تطبیق عنصر قبلی اگر n بار یا بیشتر اتفاق بیفتد.
{,m}تطبیق عنصر قبلی اگر بیش از m بار اتفاق بیفتد.

اگر به مثال اخیر (شماره تلفن) بازگردیم، می‌توانیم مثال جدید خود را ایجاد کنیم.

مثال قبلی (شماره تلفن):

^\(?[0-9] [0-9] [0-9]\)? [0-9] [0-9] [0-9]- [0-9] [0-9] [0-9] [0-9]$

مثال جدید:

^\(?[0-9]{3}\)? [0-9]{3}-[0-9]{4}$

اکنون آن را امتحان می‌کنیم:

[me@linuxbox ~]$ echo "(555) 123-4567" | grep -E '^\(?[0-9]{3}\)? [0-9]{3}-[0-
9]{4}$'
(555) 123-4567
[me@linuxbox ~]$ echo "555 123-4567" | grep -E '^\(?[0-9]{3}\)? [0-9]{3}-[0-9]
{4}$'
555 123-4567
[me@linuxbox ~]$ echo "5555 123-4567" | grep -E '^\(?[0-9]{3}\)? [0-9]{3}-[0-9
]{4}$'
[me@linuxbox ~]$

همان‌طور که مشاهده می‌شود، به‌جای تایپ چند حرف، این بار فقط تعداد دفعات تکرار کاراکتر را در داخل {} قرار می‌دهیم.

منبع: لینوکس‌سیزن نوشته فرشید نوتاش حقیقت
برچسب ها: CLICommand Lineخط فرمانخط فرمان لینوکسمحتوای باز
درباره فرشید نوتاش حقیقت

همیشه نیازمند یک منبع آموزشی فارسی در حوزه نرم‌افزارهای آزاد/ متن‌باز و سیستم‌عامل گنو/لینوکس بودم. از این رو این رسالت رو برای خودم تعریف کردم تا رسانه «محتوای باز» رو بوجود بیارم.

نوشته‌های بیشتر از فرشید نوتاش حقیقت
قبلی کلاس‌های کاراکتر POSIX
بعدی به‌کارگیری عبارات منظم

دیدگاهتان را بنویسید لغو پاسخ

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

جستجو
جستجو برای:
دسته‌بندی موضوعی مقالات
  • برنامه‌نویسی
    • پایتون
    • دواپس
  • پایگاه‌داده
    • MariaDB
    • MySQL
  • تجارت الکترونیک
    • بازاریابی اینترنتی
    • دیجیتال مارکتینگ
    • شبکه‌های اجتماعی
  • جامعه کاربری
    • لاگ
  • دسته‌بندی نشده
  • شبکه و امنیت
  • طراحی وب
    • سئو
    • سیستم مدیریت محتوا
      • وردپرس
  • فناوری‌های نوظهور
    • اینترنت اشیاء
    • رایانش ابری
      • OpenStack
    • کلان‌داده‌ها
  • گنو/لینوکس
    • توزیع
      • CentOS
      • اوبونتو
      • دبیان
      • فدورا
    • چیست
    • خط فرمان
  • مهاجرت به آزاد/متن‌باز
  • نرم‌افزار
    • اداری
      • لیبره آفیس
        • ایمپرس
        • بیس
        • دراو
        • رایتر
        • کالک
    • کاربردی
    • گرافیک و انیمیشن
      • بلندر
      • گیمپ
نماد الکترونیکی (اینماد)
پرداخت‌یار

محتوای باز؛ مرجع آموزشی نرم‌افزارهای آزاد/ متن‌باز

از اینکه قصد همکاری با رسانه «محتوای باز» را دارید بسیار خرسندیم و این مایه مباهات ماست.

نحوه همکاری با ما چندان پیچیده نیست و شرایط آن در ادامه، ارائه گردیده است.

دستمزد مدرسین

پیش از بیان شرایط ضبط ویدئو شایان ذکر است اشاره‌ای به دستمزد مدرسین سایت داشته باشیم.

شما ممکن است در دو حالت تمایل به نشر ویدئو خود را داشته باشید: یا آن را رایگان در اختیار عموم قرار دهید و یا اینکه در قبال فروش آن از خریدار وجه مربوطه محصول را اخذ نمایید.

صرف نظر از هر حالت ممکنه، می‌بایست شرایطی که در ادامه ذکر شده‌اند را رعایت کرده باشید.

در حالت اول (رایگان) رسانه محتوای باز (Open Content)، نه وجهی از شما برای نشر ویدئو می‌گیرد و نه وجهی به شما پرداخت می‌نماید و دوره آموزشی شما را به رایگان منتشر می‌کند.

اما در حالت بعدی طریقه همکاری به روش درآمد از فروش خواهد بود، به گونه‌ای که 70 درصد از کل مبلغ فروش دوره آموزشی متعلق به مدرس دوره بوده و 30 درصد مابقی به رسانه محتوای باز تعلق می‌گیرد.

شرایط کلی ضبط دوره آموزشی

دوره آموزشی مربوطه، صرف نظر از هر محتوایی که دارد می‌بایست در یکی از توزیعات گنو/لینوکسی ضبط شده باشد. (به‌عنوان مثال دوره دروپال در اوبونتو، دوره آموزشی کار با آردوینو در دبیان و امثالهم). اگر دوره آموزشی شما در محیط ویندوز و یا هر پلتفرم/سیستم‌عامل دیگری ضبط شده باشد از همکاری با شما معذوریم.

پیشنهاد می‌گردد برای ضبط دوره آموزشی در توزیع گنو/لینوکس از ابزار قدرتمند OBS استفاده نمایید. البته این صرفا یک پیشنهاد است و شما می‌توانید از هر ابزار مناسب دیگری برای این کار بهره ببرید.

برای آشنایی یا تسلط بیشتر می‌توانید دوره رایگان آموزش OBS محمد عابدینی را ببینید:

مشاهده دوره آموزش OBS
شرایط کیفی ضبط دوره آموزشی

کیفیت صدا از اهمیت ویژه‌ای برخوردار می‌باشد و می‌بایست فاقد هر گونه نویز یا صدای اضافی دیگری (صدای محیط پیرامون) باشد.

دوره آموزشی تهیه شده صرفا باید برای رسانه محتوای باز تدوین شده باشد و در هیچ سایت مشابه دیگری قرار نگرفته باشد.

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

دوره آموزشی ضبط شده می‌باید فاقد هر گونه لوگو یا آدرس سایت دیگری (در گوشه تصویر یا بک‌گراند صفحه دسکتاپ و هر جای دیگری) باشد.

در حین دوره، مدرس نباید به برند خاصی اشاره کند که جز رقبای ما به‌شمار می‌آیند.

مدرس باید در ابتدا در اواسط و در انتهای دوره به برند ما یعنی رسانه محتوای باز (Open Content) بصورت کلامی اشاره نماید.

مدرس، هنگام تدریس نباید تپق زده، سرفه یا عطسه کند یا صدای قورت دادن بزاقش شنیده شود و بایستی با صدای رسا، دوستانه و پرانرژی به تدریس بپردازد.

قبل از تدوین دوره آموزشی حتما با ما در تماس باشید و یک ویدیوی چنددقیقه‌ای (ترجیحا 5 الی 10 دقیقه)، بصورت نمونه‌کار برای ما بفرستید.

از همکاری با شما سپاسگزاریم.

فراخوان همکاری