با Regex شروع کنید: عبارات عادی کار ساده ای می کنند

افشای: پشتیبانی شما به حفظ سایت کمک می کند! ما برای برخی از خدماتی که در این صفحه توصیه می کنیم هزینه ارجاع دریافت می کنیم.


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

اگر این توضیح از regex کمی انتزاعی به نظر برسد ، شاید با نگاهی به چند کاربرد رایج از regex به روشن شدن سودمندی آنها کمک کنیم. Regex تمام وقت در برنامه نویسی رایانه مورد استفاده قرار می گیرد. به عنوان مثال ، در اینجا چند کاربرد رایج برای regex آورده شده است:

  • برای تأیید اینکه آدرس ایمیل وارد شده به یک فرم وب یک آدرس ایمیل درست تنظیم شده است.
  • برای شناسایی کلیه پرونده ها در یک سیستم رایانه ای که با پسوند مشخصی از پرونده ها پایان می یابد.
  • برای بررسی URL های درخواست شده از یک سرور وب و انجام مجدد تغییر مسیر در صورت تحقق URL ها از الگوی regex.

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

تاریخچه Regex

Regex به عنوان یک اصل علمی در زمینه رایانه تصور شد که در سال 1956 توسط ریاضیدان استفان کول کلین ایجاد شد. در ابتدا ، regex صرفاً نظری بود. با این حال ، در سال 1968 برای اولین بار هنگامی که کن تامپسون آن را در ویرایشگر متن QED گنجاند ، در یک برنامه رایانه ای استفاده شد. تامپسون تنها در تصویب regex تنها نبود. تقریباً در همین زمان ، داگلاس T راس برای تجزیه و تحلیل واژگان در کامپایلر regex را گنجانید.

این نخستین کاربردهای regex به زودی دنبال شدند. در اوایل دهه 1970 ، الگوهای منطقی regex به ویرایشگر متن یونیکس اضافه شد ، ویرایش. اندکی پس از آن ، تجزیه کننده regex ساخته شده به ed به عنوان یک ابزار مستقل Unix به نام grep چرخانده شد. در آن زمان فقط زمان قبل از پشتیبانی regex در بسیاری از برنامه ها و برنامه های کاربردی یونیکس از جمله vi ، lex ، sed ، Awk ، expr ، Emacs و موارد دیگر درج شده بود..

در آن زمان regex راه خود را به گوشه های مختلف سیستم عامل یونیکس که وارد شده بود پیدا کرده بود. با این حال ، هنوز جایی برای پیشرفت وجود دارد. بنابراین نحو اصلی regex ایجاد شده توسط کلین در دهه 1980 بهبود یافت وقتی پشتیبانی از الگوهای regex گسترش یافته بر اساس کتابخانه regex گسترش یافته توسط Henry Spencer به Perl اضافه شد. با این حال ، حتی پس از افزودن regex به پرل اسپنسر به گسترش این ایده ادامه داد و تکرار دیرتر و پیشرفته كتابخانه وی به زبان برنامه نویسی Tcl ساخته شد – و این اجرا سرانجام راه خود را به پروژه های مدیریت مدرن و پر اطلاعات مدرن تبدیل كرد. مانند PostgreSQL.

در طول دهه 1980 ، regex هرگز استاندارد نبود. با این حال ، این تغییر در سال 1992 هنگامی که regex در POSIX.2 استاندارد شد. امروز ، regex توسط بسیاری از زبان های برنامه نویسی مختلف و ویرایشگران متن پشتیبانی می شود. اکثر پیاده سازی های مدرن سازگار با POSIX هستند ، اما به طور کلی در استاندارد POSIX به روش های مختلفی گسترش می یابند که از یک اجرای تا دیگری متفاوت است. در نتیجه ، در حالی که الگوهای پایه ریجکس عموماً از یک اجرا تا اجرای دیگر مطابقت دارند ، الگوهای پیشرفته بسته به محیطی که در آن اعمال می شوند ، می توانند به طور قابل توجهی متفاوت باشند.

چگونه Regex کار می کند

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

شخصیت های تحت اللفظی خود را نشان می دهند. این بدان معنی است که یک حرف تحت اللفظی a ، حرف a و یک حرف تحت اللفظی 1 را نشان می دهد رقم 1. با این حال ، regex اگر محدود به شخصیت های تحت اللفظی نباشد ، ارزشمند نیست. شخصیت های خاص همان چیزی است که regex را مفید می کند.

شخصیت های خاص در یک الگوی regex معنای منطقی دارند. به عنوان مثال ، بیایید به نقطه نگاه کنیم. نقطه یا دوره برای نمایش شخصیت ها استفاده می شود. بنابراین ، .a با هر توالی دو شخصیت که در آن شخصیت دوم حرف تحت اللفظی a است مطابقت دارد. این بدان معنی است که ba ، 1a ، -a ، aa و نامه ای که از فضای خالی مقدم است ، همه با آن الگوی Regex مطابقت دارند.

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

  • اگر می خواهید مطمئن شوید که یک متن متن یک آدرس ایمیل است ، می توانید آن را در برابر این الگوی regex آزمایش کنید: ^ [A-Z0-9 ._٪ + -] [email protection] [A-Z0-9.-] +. [AZ] {2 ، $.
  • برای اسکن کردن نام پرونده ها و گرفتن هر آنچه که با پسوند پرونده .php به پایان رسید ، می توانید از regex زیر استفاده کنید: ^. *. php $.

اگر تازه وارد Regex شده اید ، این الگوهای احتمالاً بسیار گیج کننده هستند. برای درک چگونگی عملکرد این الگوهای ، باید درک کنید که همه شخصیت های ویژه چیست.

شخصیت های ویژه Regex

در حالی که هر اجرای regex از نظر کمی متفاوت است ، اما به طور کلی همه آنها با این استثناء چند رفتار با این شخصیت های خاص دارند..

  • : کاراکتر backslash برای فرار از شخصیت های خاص دیگر استفاده می شود. بنابراین اگر می خواهید از شخصیت دیگری مانند یک نقطه فرار کنید ، به طوری که از آن به عنوان یک شخصیت تحت اللفظی تعبیر شود ، می توانید با پیشبرد نقطه با یک backslash مانند این کار را انجام دهید: .
  • ^: از uptick برای نشان دادن موقعیت شروع در یک رشته استفاده می شود. regex ^ a با هر آغازین با حرف تحت اللفظی a مطابقت دارد.
  • $: از یک علامت دلار برای مطابقت با موقعیت پایان در یک رشته استفاده می شود. regex a $ با هر رشته خاتمه یافته با حرف تحت اللفظی a مطابقت دارد.
  • .: نقطه یا دوره با کاراکتری غیر از یک شخصیت جدید (n) مطابقت دارد. regex 1.3 هر رشته را با یک حرف تحت اللفظی ، هر کاراکتر و یک سه معنای واقعی کلمه مانند 123 ، 1a3 و حتی 1 3 مطابقت می دهد..
  • |: لوله عمودی یک عملگر انتخاب است و می توان آن را به عنوان stand-in برای کلمه یا. بنابراین regex a | b می تواند به عنوان “a یا b” خوانده شود و با حرف a یا حرف b مطابقت داشته باشد.
  • *: یک ستاره برای مطابقت با شخصیت قبلی صفر یا بیشتر بار استفاده می شود. بنابراین regex. * تا زمانی که دارای شخصیت جدید نباشد ، با هر رشته مطابقت دارد.
  • ?: علامت سؤال با شخصیت قبلی صفر یا یک بار مطابقت دارد ، اما نه بیشتر. regex 123؟ بنابراین با 12 یا 123 مطابقت دارد.
  • +: یک نماد به علاوه یک یا چند بار با شخصیت قبلی مطابقت دارد ، اما بر خلاف ستاره ای که با شخصیت قبلی صفر یا چند بار مطابقت دارد ، کاراکتر باید حداقل یک بار ظاهر شود. بنابراین ، regex a * b + با ab و b مطابقت دارد ، اما نه به این دلیل که b باید حداقل یک بار به دلیل استفاده از نماد به علاوه ظاهر شود.
  • […]: براکت با یک شخصیت واحد موجود در داخل براکت ها مطابقت دارد. یا ، مانند این [^ …] می توان یک صعود اضافه کرد تا با کاراکتری که در داخل براکت ها وجود ندارد مطابقت داشته باشد. نیازی به فرار از کاراکترهای ویژه در داخل براکت ها نیست ، آنها به عنوان ادبی تعبیر می شوند. براکت ها اغلب برای تعریف دامنه کاراکترها استفاده می شوند. به عنوان مثال ، regex [0-9] با هر رقم واحد مطابقت دارد و [A-Z] با هر حرف بزرگ در الفبای انگلیسی مطابقت دارد. سرانجام ، براکت ها می توانند دارای کاراکترهای جدا از کاما باشند. بنابراین [a، g] با هر یک از حروف a و g مطابقت دارد.
  • {…}: بریس های فرفری ، به عنوان كیفیت كننده های آشكار ، تعداد دفعاتی را نشان می دهند كه شخصیت قبل باید ظاهر شود. regex ab 2} c تنها با abbc قابل تأمین است. برای ایجاد طیف وسیعی از مقادیر قابل قبول می توان شماره دوم اضافه کرد. بنابراین ، 2} 2 درجه سانتیگراد با abbc یا abbbc مطابقت دارد و [0-9] 1،2 {با هر یک یا دو رقم مطابقت دارد..
  • (…): از پرانتزی برای علامت گذاری به بیان زیر بیان بزرگتر استفاده می شود. بنابراین regex (abc) * با هر رشته ساخته شده از حروف abc مطابقت دارد ، اما هر سه حرف باید در کنار هم قرار بگیرند و به این ترتیب.

به خودی خود ، شخصیت های خاص تا حدودی مفید هستند. این در ترکیب این شخصیت های خاص با الفاظ است که می توان الگوهای قدرتمند را توصیف کرد. لیست کاراکترهای ویژه فوق شامل چند ترکیب شخصیتی ویژه ساده است. بیایید برای شناسایی پرونده های PHP به regex نگاهی بیندازیم تا ببینیم چگونه این شخصیت ها با هم کار می کنند.

در اینجا رجکس مورد نظر است: ^. *. php $. بیایید یکبار آنرا یک تکه ببریم.

  • ^ نشانگر آغاز رشته آزمون است که در این حالت نام پرونده خواهد بود.
  • .* با هم کار کنید تا نشان دهید که نام پرونده می تواند شامل تعداد شخصیت ها باشد ، اما هیچ خط جدیدی ندارد.
  • .php با یک کاراکتر فرار آغاز می شود که تضمین می کند که نقطه به جای یک شخصیت خاص تعبیر می شود. در مرحله بعد ، حرفهای حرفی php نشان می دهد که بعد از نام پرونده ، می خواهیم ترکیب یک نقطه و حروف php را بررسی کنیم..
  • $ نشان می دهد که پسوند .php باید در انتهای رشته جستجو ظاهر شود تا یک مسابقه باشد.

همانطور که مشاهده می کنید ، این regex تنها با نه کاراکتر قادر به ایجاد الگویی منطقی است که می تواند از طریق نام پرونده های پیچیده جابجا شود و مواردی را که با پسوند پرونده .php خاتمه می یابد ، نشان دهد.

یونیکد و Regex

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

برخی از پیاده سازیهای regex از استفاده از یونیکد برای ساختن الگوهای regex پشتیبانی می کنند ، به این معنی که می توان الگوهای regex ایجاد کرد که قادر به تست رشته هایی هستند که شامل کاراکترهایی از زبان های مختلف هستند. علاوه بر این ، عبارات یونیکد را می توان با الفاظ و کاراکترهای ویژه ترکیب کرد تا الگوهای پیچیده ریژکس ایجاد شود.

برخی از رایج ترین الگوهای regex یونیکد عبارتند از:

  • p {L}: با هر حرف به هر زبانی مطابقت دارد. بنابراین ، p {L} 2،4} با هر دنباله ای از حروف بین دو تا چهار کاراکتر مطابقت دارد.
  • p {Z}: با هر شخصیت فضایی مطابقت دارد.
  • p {N}: با کاراکترهای عددی مطابقت دارد.
  • p {P}: با علائم نگارشی مطابقت دارد.

بسیاری از ویژگی های اضافی یونیکد وجود دارد که می توانید هنگام ساخت عبارات منظم از آنها استفاده کنید ، به شرطی که اجرای شما با پشتیبانی از regex unicode کار کند. برای کسب اطلاعات بیشتر ، عبارات منظم یونیکد را در Regular-Expressions.info بخوانید.

منابع

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

  • Regular-Expressions.info: اطلاعات زیادی در مورد Regex در قالب مقاله و آموزش.
  • Regex Cheatsheet از RegExLib.com: یک برگه مفید که به شما کمک می کند همه شخصیت های خاص مختلف را مستقیم نگه دارید.
  • RegExLib.com: یک مخزن رایگان عبارات منظم است که می توانید متناسب با نیاز خود کپی و اصلاح کنید.

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

  • RegExr: برچسب همه چیز را می گوید ، “یاد بگیرید ، بسازید و RegEx را تست کنید.”
  • Regex Pal: یک الگوی regex ایجاد کنید و سپس رشته ها را در برابر آن تست کنید تا مطمئن شوید که دقیقاً همان کاری را که می خواهید انجام دهد.
  • Regex 101: همه اجرای Regex برابر نیست. از این ابزار برای تست رشته ها در برابر الگوی regex و رفتار دقیق لحن بر اساس زبان برنامه نویسی که در آن الگوی را اجرا خواهید کرد استفاده کنید. PHP ، JavaScript ، Python و Erlang پشتیبانی می شوند.

تعداد کمی از متن در مورد Regex نوشته شده است ، اما سه عنوان از نظر کلاس بهترین هستند. اگر واقعاً می خواهید استاد ریژکس باشید ، هرکدام از این سه متن مسیری طولانی را برای رسیدن شما به آنجا طی می کند:

  • کتابهای آشپزی عبارات منظم: راه حل های مفصل در هشت زبان برنامه نویسی (2012) توسط گویورتس و لویتان
  • معرفی عبارات منظم (2012) توسط مایکل فیتزجرالد
  • تسلط بر عبارات منظم (2006) توسط جفری E F فریدل.

خلاصه

عبارات منظم ابزاری مستقل از زبان است که توسط برنامه نویسان رایانه برای ایجاد الگوهای منطقی استفاده می شود. این الگوهای سپس می توانند برای شناسایی رشته های متن متناسب با الگو استفاده شوند. پیاده سازی های Regex فراوان و regex توسط بسیاری از زبان های برنامه نویسی مدرن پشتیبانی می شوند و در ابزارهای جستجو در بسیاری از ویرایشگرهای متنی موجود است. شروع کار با regex می تواند مشکل باشد ، اما تسلط بر regex یک گام ضروری برای توسعه هر برنامه نویس رایانه ای است.

مطالعه بیشتر و منابع

ما راهنماها ، آموزش ها و اینفوگرافیک های بیشتری در رابطه با رایانه و برنامه نویسی داریم:

  • منابع برنامه نویسی Bash: با مهمترین پوسته خط فرمان یونیکس شروع کنید.
  • Sed مقدمه و منابع: ویرایشگر جریان ابزاری عالی برای استفاده و یادگیری عبارات منظم است.
  • منابع Awk: درباره ابزار خواهر sed Awk اطلاعاتی کسب کنید.

لیست نهایی ابزارهای وب مستر A-Z

Sed و Awk و Bash فقط بخشی از مجموعه بزرگی از ابزارهایی هستند که به مدیران سیستم اجازه می دهند سیستم عامل ها را مدیریت کنند. لیست نهایی ابزارهای وب مستر A-Z در انجام کار خود کمکهای زیادی به شما می کند.

لیست نهایی ابزارهای وب مستر A-Z
لیست نهایی ابزارهای وب مستر A-Z

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map