Regex-dən başlayın: Daimi ifadələri asanlaşdırın

Açıqlama: Dəstəyiniz saytın işini davam etdirməyə kömək edir! Bu səhifədə tövsiyə etdiyimiz bəzi xidmətlər üçün bir müraciət haqqı qazanırıq.


Müntəzəm bir ifadə, regex və ya qısa bir söz, məntiqi bir nümunəni təyin edən məktublar və simvollar ardıcıllığıdır. Mətn sətirləri daha sonra regex tərəfindən müəyyən edilmiş məntiqi naxışa uyğun olan simləri müəyyən etmək üçün nümunə ilə müqayisə edilə bilər. Bu müqayisə əsasında regex, müəyyən tələblərə cavab verən mətn sətirlərini müəyyən etmək və ya sətirlərin tələb olunan bir nümunəyə cavab verdiyini təsdiqləmək üçün istifadə edilə bilər.

Regex-in bu izahı bir az mücərrəd görünürsə, bəlkə də bir neçə ümumi regex istifadəsinə nəzər salmaq onların faydalılığını aydınlaşdırmağa kömək edəcəkdir. Regex hər zaman kompüter proqramlaşdırmasında istifadə olunur. Məsələn, burada regex üçün bir neçə ümumi istifadə var:

  • Bir veb formasına daxil edilmiş bir e-poçt adresinin düzgün şəkildə tərtib edilmiş bir e-poçt ünvanı olduğunu təsdiqləmək üçün.
  • Müəyyən bir fayl uzantısı ilə bitən bir kompüter sistemindəki bütün faylları müəyyən etmək.
  • Veb serverdən tələb olunan URL-ləri yoxlamaq və URL-lər bir regex nümunəsinə cavab verərsə yönləndirmələri həyata keçirmək.

Rejimin bir dildə deyil, nümunələri təsvir etmək üçün məntiqi bir sistem olduğunu başa düşmək vacibdir. Bununla birlikdə, regex bir çox müxtəlif proqramlaşdırma dillərində tətbiq edilmişdir və bir çox mətn redaktorlarında mətn axtarışı üçün də istifadə edilə bilər.

Regex tarixi

Regex, nəzəri bir kompüter elmi prinsipi olaraq, 1956-cı ildə riyaziyyatçı Stephen Cole Kleene tərəfindən yaradıldı. Əvvəlcə regex sırf nəzəri idi. Bununla birlikdə 1968-ci ildə Ken Thompson onu QED mətn redaktoruna daxil etdikdə ilk dəfə kompüter tətbiqində istifadə edilmişdir. Tekin, regeks qəbul etməsində tək deyildi. Eyni zamanda, Douglas T Ross bir kompilyatorda leksik analiz üçün regex daxil etdi.

Bu ilk regex tətbiqləri tezliklə izlənildi. 1970-ci illərin əvvəllərində, Unix mətn redaktoruna, reg. Məntiqi nümunələri əlavə edildi. Qısa müddətdən sonra ed daxilində qurulmuş regex parser grep adlı müstəqil Unix yardım proqramı kimi yuvarlandı. Bu zaman regex dəstəyinin vi, lex, sed, Awk, expr, Emacs və daha çox daxil olmaqla bir çox Unix kommunal və tətbiqetmələrinə daxil edilməsindən əvvəl yalnız bir müddət qaldı..

Vaxt keçdikcə reyx Unix əməliyyat sisteminin müxtəlif guşələrində öz yolunu tapdı. Ancaq yenə də inkişaf etmək üçün yer var idi. Beləliklə, Kleene tərəfindən hazırlanmış orijinal regex sintaksis, 1980-ci illərdə Genri Spencer tərəfindən yazılmış genişlənmiş reyx kitabxanası əsasında Perl-ə genişlənmiş regex nümunələrinə dəstək əlavə edildikdə yaxşılaşdırıldı. Bununla belə, Perl Spencerə regex əlavə edildikdən sonra da fikir genişlənməyə davam etdi və kitabxanasının daha sonra və daha inkişaf etmiş bir şəkildə təkrarlanması Tcl proqramlaşdırma dilində quruldu – bu tətbiq son nəticədə yüksək profilli müasir məlumat idarəetmə layihələrinə daxil oldu. PostgreSQL kimi.

1980-ci illər ərzində regex heç vaxt standartlaşdırılmadı. Lakin, 1992-ci ildə regex POSIX.2-də standartlaşdırıldıqda dəyişdi. Bu gün regex çox fərqli proqramlaşdırma dilləri və mətn redaktorları tərəfindən dəstəklənir. Müasir tətbiqlərin çoxu POSIX-ə uyğundur, lakin ümumiyyətlə POSIX standartında bir tətbiqdən digərinə qədər dəyişən müxtəlif yollarla genişlənir. Nəticədə, əsas regex nümunələri ümumiyyətlə bir tətbiqdən digərinə uyğun olsa da, inkişaf etmiş nümunələr tətbiq olunduğu mühitdən asılı olaraq əhəmiyyətli dərəcədə dəyişə bilər..

Regex necə işləyir

Adi bir ifadə iki növ simvolun birləşməsidir: hərfi və xüsusi simvol. Qarışıq olaraq, bu simvollar məntiqi bir nümunə müəyyənləşdirir. Mətnin sətirləri bu nümunə ilə müqayisə oluna bilər ki, bunların ifadə ilə müəyyən edilmiş naxışa uyğun olub-olmadığını müəyyənləşdirin.

Hərfi personajlar özlərini təmsil edirlər. Demək ki, hərfi bir məktub a hərfini, hərfi 1 nömrə 1 rəqəmini ifadə edir. Ancaq hərflə məhdudlaşsa regex çox dəyərli deyil. Xüsusi simvollar regex-in faydalı olmasına səbəb olur.

Xüsusi simvollar bir regex nümunəsi içərisində məntiqi bir məna daşıyır. Məsələn, nöqtəyə baxaq. Nöqtə, ya da dövr hər hansı bir xarakteri təmsil etmək üçün istifadə olunur. Beləliklə, .a ikinci simvolun hərfi a olduğu hər iki simvol ardıcıllıqla uyğun olardı. Bu o deməkdir ki, ba, 1a, -a, aa və boş bir boşluqdan əvvəl olan hərf bu regex nümunəsinə uyğun olacaqdır.

Nöqtə regeksdəki tək xüsusi xarakter deyil. Mürəkkəb məntiqi nümunələri təsvir etmək üçün hərfi ilə birləşdirilə bilən bir çox xüsusi simvol var. Mürəkkəb ifadələri müəyyən etmək üçün hərflərin və xüsusi simvolların necə birləşdirildiyinin iki nümunəsinə baxaq:

  • Bir mətnin bir e-poçt ünvanı olduğundan əmin olmaq istəsəniz bu regex nümunəsinə qarşı sınaya bilərsiniz: ^ [A-Z0-9 ._% + -] [email protected] [A-Z0-9.-] +. [AZ] {2,} $.
  • Fayl adlarını skan etmək və .php faylının uzadılması ilə başa çatan hər hansı bir şeyi tutmaq üçün aşağıdakı regex-dən istifadə edə bilərsiniz: ^. *. Php $.

Yenidən qeydiyyatdan keçmisinizsə, bu nümunələr yəqin ki, olduqca çaşdırıcıdır. Bu naxışların necə işlədiyini başa düşmək üçün xüsusi simvolların hamısının nə demək olduğunu başa düşmək lazımdır.

Regex Xüsusi personajlar

Hər bir regex icrası bəzi baxımdan bir qədər dəyişsə də, ümumiyyətlə, hamısı bu xüsusi simvollara bir neçə istisna olmaqla eyni münasibət göstərirlər..

  • : Çəkmə xarakteri digər xüsusi simvollardan qaçmaq üçün istifadə olunur. Beləliklə, hər hansı bir xarakter kimi təfsir ediləcək bir nöqtə kimi başqa bir xarakterdən qaçmaq istəsəniz, nöqtəni əvvəlcədən bu kimi arxadan vuraraq edə bilərsiniz: .
  • ^: Bir simvolda başlanğıc mövqeyini göstərmək üçün bir işarə istifadə olunur. Regex ^ a hərfi a hərfi ilə başlayan hər hansı bir sətrə uyğun olardı.
  • $: Bir dollar işarəsi bir simli son nöqtəni uyğunlaşdırmaq üçün istifadə olunur. A $ regex hərfi a hərfi ilə bitən hər hansı bir sətrə uyğun olardı.
  • .: Nöqtə və ya dövr yeni bir xətt (n) simvolundan başqa hər hansı bir xarakterə uyğun gəlir. Rejim 1.3 hər hansı bir simli, hər hansı bir simvol və hərfi üç, məsələn, 123, 1a3 və hətta 1 3 ilə uyğun olacaqdır.
  • |: Şaquli boru seçim seçimidir və söz üçün dayaq olaraq şərh edilə bilər. Beləliklə, a | b regeti “a və ya b” şəklində oxunur və ya hərfinə, ya da b hərfinə uyğun gəlir.
  • *: Bir ulduz, əvvəlki simvolu sıfır və ya daha çox dəfə uyğunlaşdırmaq üçün istifadə olunur. Beləliklə, regex. * Hər hansı bir sətirdə yeni bir simvol olmadığı müddətə uyğun olardı.
  • ?: Sual işarəsi əvvəlki simvola sıfır və ya bir dəfə uyğun olacaq, lakin daha çox deyil. 123 nömrəli regex? Buna görə ya 12 ya da 123-ə uyğun olardı.
  • +: Bir artı simvolu əvvəlki simvola bir və ya daha çox dəfə uyğun gəlir, lakin simvol əvvəlki sıfır və ya daha çox dəfə uyğun gələn ulduzdan fərqli olaraq ən azı bir dəfə görünməlidir. Beləliklə, a * b + regeksi ab və b uyğun olacaq, lakin b deyil, artım simvolu istifadəsi səbəbindən ən azı bir dəfə görünməlidir..
  • […]: Mötərizədə mötərizədə olan bir simvol uyğun gəlir. Və ya, mötərizədə olmayan hər hansı bir simvolu uyğunlaşdırmaq üçün bu kimi [^ …] əlavə edilə bilər. Mötərizədə xüsusi simvollardan qaçmaq lazım deyil, onlar hərfi olaraq şərh ediləcəkdir. Mötərizədə simvollar aralığını müəyyən etmək üçün tez-tez istifadə olunur. Məsələn, regex [0-9] hər hansı bir rəqəmə uyğun olardı və [A-Z] İngilis əlifbasındakı böyük hərfə uyğun olardı. Nəhayət mötərizədə vergüllə ayrılmış simvol ola bilər. Beləliklə, [a, g] hər biri a və g hərflərinə uyğun gəlirdi.
  • {…}: Açıq ölçücülər adlanan qıvrım aşırma, əvvəlki simvolun görünməli olduğu sayları göstərir. Ab {2} c regexini yalnız abbc qarşılaya bilər. Bir sıra məqbul dəyərlər yaratmaq üçün ikinci bir nömrə əlavə edilə bilər. Beləliklə, ab {2,3} c ya abbc ya da abbbc ilə uyğunlaşacaq və [0-9] {1,2} hər hansı bir və ya iki rəqəmli rəqəmə uyğun olardı.
  • (…): Parenteziya, daha böyük bir ifadə içərisində bir alt ifadəni qeyd etmək üçün istifadə olunur. Beləliklə, regex (abc) * abc hərflərindən ibarət hər hansı bir sətrə uyğun olardı, lakin hər üç məktub birlikdə və bu qaydada görünməlidir.

Özləri üçün, xüsusi simvollar bir qədər faydalıdır. Xüsusi simvolların hərflərlə birləşməsində güclü naxışlar təsvir edilə bilər. Yuxarıdakı xüsusi simvolların siyahısına bir neçə sadə xüsusi xarakter birləşməsi daxildir. Bu simvolların necə işlədiyini görmək üçün PHP sənədlərini müəyyənləşdirmək üçün regexə ikinci nəzər salaq.

Budur sual rejimi: ^. *. Php $. Gəlin bir dəfəyə götürək.

  • ^ bu vəziyyətdə bir fayl adı olacaq test sətrinin başlanğıcını göstərir.
  • .* Fayl adının istənilən simvoldan ibarət ola biləcəyini, lakin yeni xətlərin olmadığını göstərmək üçün birlikdə çalışın.
  • .php nöqtənin xüsusi bir xarakter deyil, hərfi kimi şərh edilməsini təmin edən bir qaçış xarakteri ilə başlayır. Sonrakı hərfi php hərfləri göstərir ki, faylın adından sonra nöqtə ilə php hərflərinin birləşməsini yoxlamaq istəyirik..
  • $ uyğun gəlir ki, .php uzadılması axtarış sətrinin sonunda görünməlidir.

Gördüyünüz kimi, bu doqquz simvolda bu regex mürəkkəb fayl adları ilə süzə bilən və .php fayl uzantısı ilə bitənləri təyin edə biləcək bir məntiqi nümunə yaratmağı bacarır..

Unicode və Regex

Rejekslə işləyərkən böyüyə biləcək problemlərdən biri də müasir ingilis əlifbasına daxil olmayan simvollardan istifadə edən dillərlə necə davranmaqdır. Unicode, rəqəmi rəqəmsal rəqəmlərə kodlaşdıraraq bu problemi həll etməyə çalışan kodlaşdırma standartıdır.

Bəzi regex tətbiqetmələri, regex nümunələri yaratmaq üçün Unicode-dan istifadəni dəstəkləyir, yəni müxtəlif dillərdən olan simvolları daxil edən sətirləri sınaya biləcək regex nümunələri yaradıla bilər. Bundan əlavə, mürəkkəb regex nümunələri yaratmaq üçün Unicode ifadələri hərfi və xüsusi işarələrlə birləşdirilə bilər.

Ən çox yayılmış Unicode regex nümunələrindən bəziləri daxildir:

  • p {L}: İstənilən dildə istənilən hərfə uyğun gəlir. Beləliklə, p {L} {2,4} uzunluğu iki və dörd simvol arasındakı hər hansı bir ardıcıllıqla uyğun gəlir.
  • p {Z}: Hər hansı bir boşluq simvoluna uyğun gəlir.
  • p {N}: Rəqəmsal işarələrə uyğundur.
  • p {P}: durğu işarələrinə uyğun gəlir.

Müntəzəm ifadələr qurarkən istifadə edə biləcəyiniz bir çox əlavə Unicode xüsusiyyətləri vardır ki, bunların hamısı Unicode regex-i dəstəkləyir. Daha çox məlumat əldə etmək üçün Regular-Expressions.info saytında Unicode Daimi ifadələri oxuyun.

Resurslar

Rejimin necə işlədiyini və kod və mətnin müəyyən bitlərini mətn redaktorunda təyin etmək və ya kompüter tətbiqində məlumatları müəyyənləşdirmək və yoxlamaq üçün istifadə edə biləcəyiniz barədə əsas hissi vermək üçün bu primerdə kifayət qədər məlumat verdik. Daha çox məlumat əldə etmək üçün, bu qısa təlimdə göstərdiyimizdən daha qabaqcıl məlumat verən aşağıdakı mənbələrə baxın:

  • Regular-Expressions.info: məqalələr və dərs vəsaitləri şəklində regex haqqında çoxlu bilik.
  • Regex Cheatsheet – RegExLib.com: Fərqli xüsusi simvolların hamısını düz tutmağınıza kömək edəcək faydalı bir cheatheet.
  • RegExLib.com: kopyaladığınız və ehtiyaclarınıza uyğun dəyişdirə biləcəyiniz adi ifadələrin pulsuz bir depo.

Mütəmadi ifadələr yazmağın ən yaxşı yollarından biri onları yazmağa başlamaqdır. Aşağıdakı onlayn alətlər, xüsusi regexinizi tez bir zamanda xüsusi mətn bloku ilə müqayisə edərək, bunu etməyə imkan verəcəkdir ki, işləyən normal ifadələri necə tərtib edəcəyinizi anlayasınız:

  • RegExr: etiket xətti hamısını “Reqs öyrən, qur və test et.”
  • Regex Pal: bir regex nümunəsi yaradın və sonra istədiyinizi etdiyinizə tam əmin olduğundan əmin olun..
  • Regex 101: bütün regex tətbiqləri eyni dərəcədə yaradılmır. Bu alətdən nümunələri tətbiq edəcəyiniz proqramlaşdırma dilinə əsaslanaraq bir regex naxışına və incə tənzimləmə davranışına qarşı strings yoxlamaq üçün istifadə edin. PHP, JavaScript, Python və Erlang dəstəklənir.

Regex haqqında bir neçə mətn yazılmışdır, lakin üçü ən yaxşısıdır. Əgər doğrudan da regex-i mənimsəmək istəyirsinizsə, bu üç mətndən hər hansı biri sizi oraya aparmaq üçün uzun bir yol keçəcəkdir:

  • Daimi İfadələr Kılavuzu: Goyvaerts və Levithan tərəfindən Səkkiz Proqramlaşdırma Dillərində (2012) ətraflı həll yolları
  • Michael Fitzgerald tərəfindən müntəzəm ifadələr (2012) təqdim olunur
  • Jeffrey E F Friedl tərəfindən müntəzəm ifadələrin mənimsənilməsi (2006).

Xülasə

Daimi ifadələr, kompüter proqramçıları tərəfindən məntiqi nümunələr yaratmaq üçün istifadə olunan bir dildir. Bu naxışlar sonra naxışa uyğun mətn sətirlərini müəyyən etmək üçün istifadə edilə bilər. Regex tətbiqetmələri çoxdur və regex ən müasir proqramlaşdırma dilləri tərəfindən dəstəklənir və bir çox mətn redaktoruna daxil edilmiş axtarış vasitələri daxilində mövcuddur. Regex ilə başlamaq çətin ola bilər, ancaq regex’i mənimsəmək hər hansı bir kompüter proqramçısının inkişafında zəruri bir addımdır.

Əlavə oxu və mənbələr

Kompüterlər və kodlaşdırma ilə əlaqəli daha çox təlimat, dərs vəsaiti və infoqrafiya var:

  • Baş proqramlaşdırma mənbələri: ən vacib Unix əmr satırı qabığından başlayın.
  • Sed Giriş və mənbələr: axın redaktoru müntəzəm ifadələrin istifadəsi və öyrənilməsi üçün əla vasitədir.
  • Awk Resursları: sed’s bacısı vasitəsi Awk haqqında hər şeyi öyrənin.

Veb ustası alətlərinin ən son siyahısı A-Z

Sed və Awk və Bash, sistem rəhbərlərinə əməliyyat sistemlərini idarə etməyə imkan verən geniş bir alət toplusunun yalnız bir hissəsidir. A-Z Vebmaster Alətlərinin Son Siyahısı işinizdə çox kömək edəcəkdir.

Veb ustası alətlərinin ən son siyahısı A-Z
Veb ustası alətlərinin ən son siyahısı 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