Php müntəzəm ifadələr dərəcə simvolları. PHP Dərsləri - Nümunələrlə Daimi İfadələr. İki ədədin dəyişdirilməsi




Daimi ifadələr tərtibatçılar üçün çox faydalı bir vasitədir. Onların köməyi ilə siz mətni, sözləri və ya hər hansı digər simvolları tapa, müəyyən edə və ya əvəz edə bilərsiniz. Bugünkü məqalədə hər hansı bir veb tərtibatçısının ehtiyac duyacağı ən faydalı 15 normal ifadə var.

Normal ifadələrə giriş

Bir çox təcrübəsiz tərtibatçılar müntəzəm ifadələri başa düşmək və istifadə etməkdə çox çətinlik çəkirlər. Əslində hər şey göründüyü qədər çətin deyil. Faydalı və çox yönlü kodu ilə birbaşa ifadələrə keçməzdən əvvəl gəlin əsaslara nəzər salaq:

Normal İfadə Sintaksisi

Müntəzəm ifadə deməkdir
foo "foo" sətri
^foo Sətir "foo" ilə başlayır
foo$ Sətir "foo" ilə bitir
^foo$ "foo" sətirdə yalnız bir dəfə olur
a, b və ya c
hər hansı kiçik hərf
[^A-Z] böyük hərflə olmayan hər hansı simvol
(gif|jpg) Həm "gif", həm də "jpeg" deməkdir
+ Bir və ya daha çox kiçik hərf
İstənilən rəqəm, nöqtə və ya mənfi işarə
^{1,}$ Hər hansı bir söz, ən azı bir hərf, rəqəm və ya _
()() wy, wz, xy və ya xz
(^A-Za-z0-9) İstənilən simvol (rəqəm və ya hərf deyil)
({3}|{4}) Üç hərf və ya 4 rəqəm deməkdir

Adi ifadələr üçün PHP funksiyaları

Funksiya Təsvir
preg_match() preg_match() funksiyası verilmiş nümunəyə uyğun olaraq sətri axtarır, sətir tapılarsa doğru, əks halda false qaytarır.
preg_match_all() preg_match_all() funksiyası nümunə ilə verilmiş sətirin bütün baş vermələrini tapır
preg_replace() preg_replace() funksiyası ereg_replace() funksiyası ilə eyni şəkildə işləyir, istisna olmaqla, müntəzəm ifadələr həm axtarış modelini, həm də tapılmış dəyəri əvəz etmək üçün sətri təyin etmək üçün istifadə edilə bilər.
preg_split() preg_split() funksiyası split() funksiyası ilə eynidir, istisna olmaqla, müntəzəm ifadə axtarış nümunəsi üçün parametr kimi istifadə edilə bilər.
preg_grep() preg_grep() funksiyası giriş massivinin bütün elementlərini axtarır, müntəzəm ifadə nümunəsinə uyğun gələn bütün elementləri qaytarır.
preg_quote() Normal ifadə simvollarından qaçır

Domen adının yoxlanılması

Sətin etibarlı domen adı olub-olmaması yoxlanılır

$url = "http://komunitasweb.com/"; if (preg_match("/^(http|https|ftp)://(*(?:.*)+):?(d+)?/?/i, $url)) ( echo "Sizin url qaydasındadır ."; ) else ( "Yanlış url."; ) əks-sədası

Mətndə sözlərin vurğulanması

Bu, çox faydalı müntəzəm ifadədir, ondan düzgün sözü tapmaq və vurğulamaq üçün istifadə edə bilərsiniz. Axtarış nəticələrini göstərmək üçün xüsusilə faydalıdır.

$text = "KomunitasWeb-dən nümunə cümlə, regex veb proqramlaşdırmada populyarlaşdı. İndi biz regex öyrənirik. Vikipediyaya görə, Normal ifadələr (regex və ya regexp kimi qısaldılmış, cəm formaları olan regex, regexps və ya regexen) formal şəkildə yazılır. müntəzəm ifadə prosessoru tərəfindən şərh edilə bilən dil"; $text = preg_replace("/b(regex)b/i", " 1", $text); echo $text;

WordPress Bloqunda Axtarış Nəticələrinin Vurğulanması

Əvvəlki nümunədə qeyd edildiyi kimi, bu kod nümunəsi axtarış nəticələrində faydalıdır və bu funksiyanı wordpress bloqunda həyata keçirmək üçün gözəl bir yol var.

Search.php faylınızı açın və the_title() funksiyasını tapın. Onu aşağıdakı kodla əvəz edin:

echo $title;

İndi bu sətirin üzərinə bu kodu əlavə edin:

\0", $title); ?>

search.php faylını yadda saxlayın və style.css-i açın. Aşağıdakı sətri əlavə edin:

Güclü.axtarış-çıxarışı ( fon: sarı; )

HTML sənədindən bütün şəkillərin alınması

Əgər nə vaxtsa veb-səhifədən bütün şəkilləri əldə etmək lazım idisə, bu kod cURL imkanlarından istifadə edərək asanlıqla şəkil yükləyicisi yarada bilərsiniz.

$image = massiv(); preg_match_all("/(img|src)=("|\")[^"\">]+/i", $data, $media); təyin edilmədi($data); $data = preg_replace("/(img|src)("|\"|="|=\")(.*)/i", "$3", $media); foreach ($data kimi $url) ( $info = pathinfo($url); if (isset($info["uzatma"])) ( if (($info["uzatma"] == "jpg") || ($info["uzatma"] == "jpeg") || ($info["uzatma"] == "gif") || ($info["uzatma"] == "png")) array_push($ şəkillər, $url); ) )

Dublikat sözləri silin (həssas deyil)

Yazarkən sözləri tez-tez təkrar edirsiniz? Bu müntəzəm ifadə kömək edəcəkdir.

$text = preg_replace("/s(w+s)1/i", "$1", $text);

Təkrarlanan durğu işarələrinin silinməsi

Eyni, yalnız durğu işarələri üçün. İkiqat vergüllə vidalaşın.

$text = preg_replace("/.+/i", ".", $text);

XML/HTML teqlərini axtarın

Bu sadə funksiya iki arqument alır. Birincisi, tapmalı olduğunuz teq, ikincisi isə XML və ya HTML ehtiva edən dəyişəndir. Yenə də bu funksiya cURL ilə istifadə etmək üçün çox rahatdır.

funksiya get_tag($tag, $xml) ( $tag = preg_quote($tag); preg_match_all("(<".$tag."[^>]*>(.*?).")", $xml, $uyğunluqlar, PREG_PATTERN_ORDER); $ uyğunluğu qaytarın; )

Xüsusi atribut dəyəri olan XHTML/XML teqlərini axtarın

Bu funksiya əvvəlki funksiyaya çox bənzəyir, ancaq etiketə istədiyiniz atribut təyin edə bilərsiniz. Məsələn, asanlıqla tapa bilərsiniz

.

funksiya get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($) attr); $value = preg_quote($value); $tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*". "(["\"])$dəyər\\2[^>]*>(.*?)<\/\\1>/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); qaytar $match; )

Onaltılıq Rəng Dəyərlərini tapın

Veb tərtibatçısı üçün başqa bir faydalı vasitə! Bu, rəngin onaltılıq dəyərini tapmaq/yoxlamaq imkanı verir.

$string = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) ( echo "nümunə 6 uğurludur."; )

Məqalənin başlıq axtarışı

Bu kod parçası teqlərin içərisində mətni tapacaq və göstərəcək , html səhifəsində.

$fp = fopen("http://www.catswhocode.com/blog", "r"); while (!feof($fp))( $səhifə .= fgets($fp, 4096); ) $titre = eregi(" (.*)",$səhifə,$regs); echo $regs; fclose($fp);

Apache jurnalının təhlili

Əksər saytlar tanınmış Apache veb serverində işləyir. Əgər saytınız onlardan biridirsə, niyə Apache qeydlərini təhlil etmək üçün PHP və müntəzəm ifadələrdən istifadə etməyəsiniz?

//Qeydlər: Apache veb serveri //Yalnız HTML fayllarına uğurlu girişlər. Səhifə baxışlarının sayını hesablamaq üçün faydalıdır. "^((?#müştəri IP və ya domen adı)S+)s+((?#basic autentifikasiyası)S+s+S+)s+[((?#tarix və vaxt)[^]]+)]s+"(?: GET|POST|HEAD) ((?#fayl)/[^ ?"]+?.html?)??((?#parameters)[^ ?"]+)? HTTP/+"s+(?#status kodu)200s+((?#bayt köçürüldü)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent) )[^"]*)"$" //Qeydlər: Apache veb serveri //Yalnız 404 xəta "^((?#müştəri IP və ya domen adı)S+)s+((?#basic autentifikasiyası)S+s+S+) s+[((?#tarix və vaxt)[^]]+)]s+"(?:GET|POST|HEAD) ((?#fayl)[^ ?"]+)??((?#parameters)[ ^ ?"]+)? HTTP/+"s+(?#status kodu)404s+((?#bayt köçürüldü)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent) )[^"]*)"$"

İkiqat dırnaqların ağıllı sitatlarla əvəz edilməsi

Əgər siz mətbəə həvəskarısınızsa, adi qoşa sitatları ağıllı sitatlarla əvəz edən bu müntəzəm ifadəni bəyənəcəksiniz. Bənzər müntəzəm ifadə WordPress-də səhifə məzmununda istifadə olunur.

Preg_replace("B"b([^"x84x93x94rn]+)b"B", "?1?", $mətn);

Hərtərəfli parol yoxlanışı

Bu müntəzəm ifadə mətn sahəsinə ən azı altı simvol, rəqəm, tire və alt xətt daxil edilməsini təmin edəcək.

Mətn sahəsində ən azı bir böyük hərf, bir kiçik simvol və bir rəqəm olmalıdır.

"A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?) [-_a-zA-Z0-9](6,)z"

WordPress: Yazıdan şəkillər əldə etmək üçün müntəzəm ifadədən istifadə

Çoxlarınız WordPress istifadəçisi olduğunuz üçün məqalənin mətnindən bütün şəkilləri əldə etməyə və onları çıxarmağa imkan verən kodun olması faydalı ola bilər.

Bu kodu istifadə etmək üçün onu mövzunuzdakı istənilən fayla yapışdırın.

post_content; $szSearchPattern = "~ ]* />~"; // Bütün şəkilləri tutmaq və nəticələri $aPics-də saxlamaq üçün preg_match_all-u işə salın preg_match_all($szSearchPattern, $szPostContent, $aPics); // Bizdə ən azı 1 şəklin olub olmadığını yoxlayın $iNumberOfPics = count($aPics); if ($iNumberOfPics > 0) ( // İndi burada siz şəkillərlə nə etmək lazımdırsa onu edəcəksiniz // Bu misal üçün şəkillər sadəcə olaraq ($i=0; $i) göstərilir.< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Avtomatik ifadələrin yaradılması

Wordpress-də istifadə olunan başqa bir xüsusiyyət də gülüş simvollarını avtomatik olaraq gülüş şəkli ilə əvəz etməyə imkan verməsidir.

$texte="Smayş ilə mətn:-)"; echo str_replace(":-)"," ",$mətn);

Hər hansı bir müasir proqramlaşdırma dilində mətnlərlə işləyərkən, tərtibatçılar daim daxil edilmiş məlumatların istənilən nümunəyə uyğunluğunu yoxlamaq, test fraqmentlərinin axtarışı və dəyişdirilməsi və simvolik məlumatların emalı üçün digər tipik əməliyyatlarla üzləşirlər. Öz yoxlama alqoritmlərinin hazırlanması vaxt itkisinə, proqram kodunun uyğunsuzluğuna və onun işlənib hazırlanması və modernləşdirilməsində mürəkkəbliyə səbəb olur.

İnternetin və WEB inkişaf dillərinin sürətli inkişafı bunun üçün tələb olunan minimum kod miqdarı ilə mətn məlumatlarının emalı üçün universal və yığcam vasitələrin yaradılmasını tələb etdi. Yeni başlayanlar və peşəkar tərtibatçılar arasında populyar olan PHP dili də istisna deyil. Mətn şablon dili kimi müntəzəm ifadə mətnin işlənməsi vəzifələrini sadələşdirməyə və proqram kodunu onlarla və yüzlərlə sətir azaltmağa imkan verir. Bir çox işi onsuz həll etmək ümumiyyətlə mümkün deyil.

PHP-də müntəzəm ifadələr

PHP dilində müntəzəm ifadələrlə işləmək üçün üç mexanizm var - "ereg", "mb_ereg" və "preg". Ən ümumi olanı "preg" interfeysidir, onun funksiyaları ilkin olaraq PHP ilə birləşdirilmiş Perl dili üçün hazırlanmış PCRE müntəzəm ifadə dəstəyi kitabxanasına çıxışı təmin edir. Preg funksiyaları adi ifadə dilində müəyyən nümunəyə uyğun olaraq verilmiş mətn sətirində uyğunluqlar axtarır.

Sintaksis Əsasları

Qısa bir məqalə çərçivəsində müntəzəm ifadələrin bütün sintaksisini ətraflı təsvir etmək mümkün deyil, bunun üçün xüsusi ədəbiyyat var. Biz yalnız tərtibatçı üçün geniş imkanları göstərmək və kod nümunələrini anlamaq üçün əsas elementləri verəcəyik.

B formal olaraq çox çətindir və buna görə də təsviri sadələşdirəcəyik. Normal ifadə mətn sətridir. O, ayrılmış naxışdan və onun necə işlənəcəyini göstərən dəyişdiricidən ibarətdir. Şablonlara müxtəlif alternativlər və təkrarlar daxil etmək mümkündür.

Məsələn, ifadədə /\d(3)-\d(2)-\d(2)/m ayırıcı olacaq «/» , ardınca naxış və simvol "m" dəyişdirici olacaq.

Normal ifadələrin tam gücü metasimvollarla kodlanır. Dilin əsas metaxarakteri tərs kəsik işarəsidir - "\". O, özündən sonra gələn xarakterin növünü dəyişdirir (yəni, müntəzəm xarakter meta xarakterə çevrilir və əksinə). Digər mühüm metaxarakter alternativ nümunələri təyin edən "|" dirəkdir. Daha çox metaxarakter nümunələri:

PHP normal ifadələri işləyərkən boşluğa ayrıca əhəmiyyətli simvol kimi yanaşır, ona görə də ABCWHERE və ABCWHERE ifadələri fərqlidir.

Alt nümunələr

PHP-də müntəzəm alt modellər mötərizələrlə fərqlənir və bəzən "alt ifadələr" kimi də adlandırılır. Aşağıdakı funksiyaları yerinə yetirin:

    Alternativlərin seçilməsi. Məsələn, şablon istilik (bəzi|quş|) sözlərə uyğun gəlir "istilik", "atəş quşu""qovurma". Və mötərizələr olmadan, yalnız boş bir simli, "quş" və "isti" olacaq.

    "Maraqlı" alt model. Bu o deməkdir ki, əgər alt sətir naxışda uyğun gəlirsə, nəticədə bütün uyğunluqlar qaytarılır. Aydınlıq üçün bir nümunə götürək. Aşağıdakı müntəzəm ifadəni nəzərə alaraq: qalib ((qızıl|qızıllı)(medal|kubok)) alır - və uyğunluqları axtarmaq üçün sətir: "Qalib qızıl medal alır". Orijinal ifadəyə əlavə olaraq, axtarış nəticəsində: "qızıl medal", "medal", "qızıl".

Təkrarlama operatorları (təkrarlayıcılar)

Normal ifadələr tərtib edərkən çox vaxt rəqəmlərin və simvolların təkrarlarını təhlil etmək lazımdır. Çox təkrarlar yoxdursa, bu problem deyil. Bəs onların dəqiq sayını bilmədikdə nə etməli? Bu halda, xüsusi meta-simvollardan istifadə edilməlidir.

Təkrarları təsvir etmək üçün kvadrifikatorlardan istifadə olunur - kəmiyyəti təyin etmək üçün meta simvollar. Kvadifikatorlar iki növdür:

  • ümumi, mötərizədə;
  • qısaldılmış.

Ümumi kəmiyyət göstəricisi elementin icazə verilən təkrarlarının minimum və maksimum sayını əyri mötərizələrdə iki ədəd kimi təyin edir, məsələn: x(2.5). Təkrarların maksimum sayı bilinmirsə, ikinci arqument buraxılır: x(2,).

Qısaldılmış kəmiyyət göstəriciləri sintaksisin həddən artıq yüklənməsinin qarşısını almaq üçün ən ümumi təkrarların simvollarıdır. Üç abreviatura ümumiyyətlə istifadə olunur:

1. * - sıfır və ya daha çox təkrar, (0,) bərabərdir.

2. + - bir və ya bir neçə təkrar, yəni,).

3.? - sıfır və ya yalnız bir təkrar - (0.1).

Normal ifadə nümunələri

Normal ifadələri öyrənənlər üçün nümunələr ən yaxşı dərslikdir. Budur, minimum səylə böyük potensialını göstərən bir neçə. Bütün proqramlaşdırma kodları PHP 4.x və daha yüksək versiyaları ilə tam uyğundur. Sintaksisi tam başa düşmək və dilin bütün xüsusiyyətlərindən istifadə etmək üçün biz J. Friedl-in Daimi İfadələr kitabını tövsiyə edirik, burada sintaksis tam əhatə olunub və burada təkcə PHP deyil, həm də Python üçün müntəzəm ifadələrin nümunələri var, Perl, MySQL, Java, Ruby və C#.

E-poçt ünvanının düzgünlüyünün yoxlanılması

Tapşırıq. Ziyarətçidən e-poçt ünvanı tələb edən bir veb səhifə var. Normal ifadə mesajları göndərməzdən əvvəl qəbul edilmiş ünvanın düzgün olub olmadığını yoxlamalıdır. Çek, göstərilən poçt qutusunun həqiqətən mövcud olduğuna və məktubları qəbul etdiyinə zəmanət vermir. Lakin o, bilərəkdən yanlış ünvanları silə bilər.

Həll. Hər hansı bir proqramlaşdırma dilində olduğu kimi, e-poçt ünvanının təsdiqlənməsi üçün müntəzəm ifadələr PHP-də müxtəlif yollarla həyata keçirilə bilər və bu məqalədəki nümunələr qəti və ya yeganə yol kimi nəzərdə tutulmamışdır. Buna görə də, hər bir halda, proqramlaşdırma zamanı nəzərə alınmalı olan tələblərin siyahısını təqdim edəcəyik və konkret həyata keçirilməsi tamamilə tərtibatçıdan asılıdır.

Beləliklə, e-poçtun etibarlılığını yoxlayan ifadə aşağıdakı şərtləri yoxlamalıdır:

  1. Mənbə sətirində @ simvolunun olması və boşluqların olmaması.
  2. @ simvolundan sonra ünvanın domen hissəsi yalnız domen adları üçün etibarlı simvolları ehtiva edir. Eyni şey istifadəçi adına da aiddir.
  3. İstifadəçi adını təsdiq edərkən, apostrof və ya apostrof kimi xüsusi simvolların mövcudluğunu aşkar etmək lazımdır.Bu simvollar potensial təhlükəlidir və SQL inyeksiyaları kimi hücumlarda ola bilər. Belə ünvanlardan çəkinin.
  4. İstifadəçi adları sətirdə ilk və ya son simvol ola bilməyən yalnız bir nöqtəyə icazə verir.
  5. Domen adı ən azı iki və altı simvoldan çox olmamalıdır.

Bütün bu şərtləri nəzərə alan nümunəni aşağıdakı şəkildə görmək olar.

URL-ləri təsdiqləyin

Tapşırıq. Verilmiş mətn sətirinin etibarlı olub-olmadığını yoxlayın. Yenə də URL-in təsdiqi üçün müntəzəm ifadələr müxtəlif üsullarla həyata keçirilə bilər.

Həll. Son versiyamız belə görünür:

/^(https?:\/\/)?([\da-z\.-]+)\.((2,6))([\/\w \.-]*)*\/?$ /

İndi rəqəmdən istifadə edərək onun komponentlərini daha ətraflı təhlil edək.

Kredit kartı nömrələrinin yoxlanılması

Tapşırıq.Ən çox yayılmış ödəniş sistemlərinin daxil edilmiş plastik kart nömrəsinin düzgünlüyünün yoxlanılmasını həyata keçirmək lazımdır. Yalnız xəritə variantı nəzərdən keçirilir

Həll.İfadə yaratarkən, daxil edilmiş nömrədə boşluqların mümkün olmasını nəzərə almaq lazımdır. Kartdakı nömrənin rəqəmləri daha asan oxumaq və diktə etmək üçün qruplara bölünür. Buna görə də, insanın nömrəni bu şəkildə (yəni, boşluqlardan istifadə etməklə) daxil etməyə cəhd etməsi təbiidir.

Mümkün boşluqları və defisləri nəzərə alan ümumi ifadənin yazılması nömrələrdən başqa bütün simvolları sadəcə silməkdən daha çətindir. Buna görə də, rəqəmlərdən başqa bütün simvolları silən ifadədə /D meta simvolundan istifadə etmək tövsiyə olunur.

İndi nömrəni yoxlamağa birbaşa keçə bilərsiniz. Bütün kredit kartı şirkətləri unikal nömrə formatından istifadə edir. Nümunə bundan istifadə edir və müştərinin şirkət adını daxil etməsinə ehtiyac yoxdur - nömrə ilə müəyyən edilir. Visa kartları həmişə 4 ilə başlayır və 13 və ya 16 rəqəmdən ibarətdir. MasterCard 16 ədəd uzunluğu ilə 51-55 diapazonunda başlayır. Nəticədə aşağıdakı ifadəni alırıq:

Sifarişi emal etməzdən əvvəl, Luhn alqoritmi ilə hesablanan nömrənin son rəqəmini əlavə olaraq yoxlaya bilərsiniz.

Telefon nömrələrinin yoxlanılması

Tapşırıq. Daxil edilmiş telefon nömrəsinin düzgünlüyünün yoxlanılması.

Həll. Stasionar və mobil telefon nömrələrindəki rəqəmlərin sayı ölkədən ölkəyə əhəmiyyətli dərəcədə dəyişir, ona görə də normal ifadələrdən istifadə edərək telefon nömrəsini universal olaraq təsdiqləmək mümkün deyil. Lakin beynəlxalq nömrələr ciddi formata malikdir və nümunələri yoxlamaq üçün əladır. Üstəlik, getdikcə daha çox milli telefon operatorları vahid standarta riayət etməyə çalışırlar. Nömrənin strukturu belədir:

+CCC.NNNNNNNNNNxEEEE, Harada:

C 1-3 rəqəmli ölkə kodudur.

N - uzunluğu 14 rəqəmə qədər olan nömrə.

E isteğe bağlı uzantıdır.

Artı işarəsi tələb olunan elementdir və x işarəsi yalnız genişləndirmə lazım olduqda mövcuddur.

Nəticədə aşağıdakı ifadəni alırıq:

^\+(1,3)\.(4,14)(?:x.+)?$

Bir sıradakı nömrələr

Tapşırıq. Müəyyən diapazondakı tam ədədin uyğun olmasını təmin etmək lazımdır. Bundan əlavə, müntəzəm ifadələrin yalnız bir sıra dəyərlərdən rəqəmlər tapması lazımdır.

Həll. Ən çox görülən hallar üçün bəzi ifadələr bunlardır:

IP ünvan axtarışı

Tapşırıq. Verilmiş sətirin 000.000.000.000-255.255.255.255 diapazonunda IPv4 formatında etibarlı IP ünvanı olub olmadığını müəyyən etməlisiniz.

Həll. Hər hansı bir PHP tapşırığında olduğu kimi, müntəzəm ifadənin də çoxlu variasiyaları var. Məsələn, bu:

İfadələrin onlayn yoxlanılması

Müntəzəm ifadələrin düzgünlüyünü yoxlamaq, "adi" proqramlaşdırma dillərindən fərqli olan sintaksisin mürəkkəbliyinə görə naşı proqramçılar üçün çətin ola bilər. Bu problemi həll etmək üçün real mətndə yaradılmış şablonun düzgünlüyünü yoxlamağı asanlaşdıran bir çox onlayn ifadə testerləri var. Proqramçı yoxlama üçün ifadə və məlumat daxil edir və emalın nəticəsini dərhal görür. Adətən ən çox yayılmış proqramlaşdırma dilləri üçün müntəzəm ifadələri, nümunələri və tətbiq fərqlərini ətraflı təsvir edən istinad bölməsi də mövcuddur.

Lakin onlayn xidmətlərin nəticələrinə tam etibar etmək PHP-dən istifadə edən bütün tərtibatçılar üçün tövsiyə edilmir. Yazılı və şəxsən sınaqdan keçirilmiş müntəzəm ifadə bacarıqları təkmilləşdirir və səhvlərin olmamasını təmin edir.

Bugünkü məqalədə biz PHP-də müntəzəm ifadələrə nəzər salacağıq və həmçinin PHP skriptlərində müntəzəm ifadələrdən istifadənin praktiki nümunələrinə baxacağıq.

PHP-də müntəzəm ifadənin əsasları

Müntəzəm ifadələrin yaranmasının lap əvvəlində onlara Unix sistemlərində sətirlərlə işləməkdə köməklik etmək tapşırılmışdı. Sonralar onlar yalnız başqa sistemlərdə deyil, müxtəlif proqramlaşdırma dillərində də fəal şəkildə istifadə olunmağa başladılar.

PHP mətni müəyyən nümunəyə uyğun təhlil etmək üçün müntəzəm ifadələrdən istifadə edir. Normal ifadələrdən istifadə edərək, bir naxışdan istifadə edərək sətirdə istədiyiniz mətni asanlıqla tapa bilərsiniz və lazım olduqda onu dəyişdirə və ya sadəcə olaraq belə mətnin olub olmadığını yoxlaya bilərsiniz.

Normal ifadə növləri

Normal ifadələrin 2 növü var:

  • Perl uyğun
  • POSIX uzadıldı

Perl-ə uyğun funksiyalar preg_match, preg_replace və ereg, eregi kimi POSIX versiyalarıdır. Nəzərə alın ki, ən son funksiyalar PHP 5.3.0-da köhnəlib və . Buna görə də biz yalnız Perl-ə uyğun funksiyalardan istifadə edəcəyik. Bilmək vacibdir ki, Perl-uyğun müntəzəm ifadələrdən istifadə edərkən belə bir ifadə kəsicilərə, məsələn, əyri xətlər (/) ilə əhatə olunmalıdır.

PHP-də Əsas Normal İfadə Sintaksisi

Normal ifadələrdən istifadə etmək üçün əvvəlcə nümunənin sintaksisini öyrənməlisiniz. Simvolları belə bir nümunə daxilində qruplaşdıra bilərik:

  • Salam kimi bir-birini izləyən adi simvollar
  • ^ və $ şəklində xəttin başlanğıc və son göstəriciləri
  • + , * , ? kimi göstəriciləri sayın.
  • | kimi məntiqi operatorlar
  • () , () kimi qruplaşdırma operatorları

E-poçt ünvanını təsdiqləmək üçün nümunə müntəzəm ifadə nümunəsi aşağıdakı kimidir:

Perl uyğun normal ifadədən istifadə edərək e-poçtun yoxlanılması üçün PHP kodu aşağıdakı kimidir:

İndi nizamlı ifadə ilə naxış sintaksisinin ətraflı təhlilinə baxaq:

Normal ifadə (naxış) Testdən keçmək (obyekt) Doğrulama uğursuz oldu (obyekt) Şərh
dünya salam dunya Salam İvan Nümunə obyektin hər hansı bir yerində olarsa keçir
^ dünya dünya səviyyəli salam dunya Nümunə obyektin əvvəlində olarsa keçir
dünya $ salam dunya dünya səviyyəli Nümunə obyektin sonunda olarsa keçir
dünya/i Bu DÜNYA Salam İvan Böyük hərflərə həssas olmayan rejimdə axtarışları həyata keçirir
^dünya$ dünya salam dunya Sətirdə yalnız "dünya" var
dünya* dünya, dünya, dünyadd vay "Dünya"dan sonra 0 və ya daha çox "d" var
dünya+ dünya, dünyadd dünya "Dünya"dan sonra ən azı bir "d" var
dünya? dünya, dünya, pis vay, narahat "Dünya"dan sonra 0 və ya 1 "d" var
dünya(1) dünya layiqli "Dünya"dan sonra bir "d" var
dünya(1,) dünya, dünyadd layiqli "Dünya"dan sonra bir və ya daha çox "d" var
dünya(2,3) dünyalı, dünyalı dünya "Dünya"dan sonra 2 və ya 3 "d" var
dünya* vay, dünya, dünya köhnə wa "wo"dan sonra 0 və ya daha çox "rld" var
yer|dünya yer, dünya günəş Sətirdə "yer" və ya "dünya" var
w.rld dünya, dünya dünya Nöqtə əvəzinə istənilən simvolu ehtiva edir
^.{5}$ dünya, yer günəş Sətir tam olaraq 5 simvoldan ibarətdir
abc, bbaccc günəş Sətirdə "a" və ya "b" və ya "c" var
dünya DÜNYA Sətir istənilən kiçik hərfləri ehtiva edir
dünya, DÜNYA, Dünya12 123 Sətir istənilən kiçik və ya böyük hərfləri ehtiva edir
[^wW] torpaq w, W Həqiqi simvol "w" və ya "W" ola bilməz

İndi ətraflı izahatla daha mürəkkəb nizamlı ifadəyə keçək.

Mürəkkəb nizamlı ifadələrin praktiki nümunələri

Artıq PHP-də müntəzəm ifadələrin nəzəriyyəsini və əsas sintaksisini bildiyiniz üçün daha mürəkkəb nümunələr yaratmağın və təhlil etməyin vaxtı gəldi.

1) İstifadəçi adını müntəzəm ifadə ilə təsdiqləyin
İstifadəçi adını yoxlamaqla başlayaq. Qeydiyyat formanız varsa, istifadəçi adlarını doğrulamalısınız. Tutaq ki, siz adda " _.- "-dan başqa hər hansı xüsusi simvol istəmirsiniz və təbii ki, adda hərflər və bəlkə də rəqəmlər olmalıdır. Həmçinin, istifadəçi adının uzunluğuna, məsələn, 4 və 20 simvol arasında nəzarət etməli ola bilərsiniz.

Əvvəlcə mövcud simvolları müəyyənləşdirməliyik. Bu aşağıdakı kodla həyata keçirilə bilər:

Bundan sonra simvolların sayını aşağıdakı kodla məhdudlaşdırmalıyıq:

İndi bu müntəzəm ifadəni bir araya gətirək:

^{4,20}$

Perl uyğun normal ifadə üçün onu '/' ilə əlavə edin. Son PHP kodu belə görünür:

2) Hex rəng kodunu müntəzəm ifadə ilə təsdiq edin
Hexadecimal rəng kodu belə görünür: #5A332C , həmçinin qısa formadan istifadə etmək mümkündür, məsələn #C5F . Hər iki halda, rəng kodu # ilə başlayır, sonra isə tam olaraq 3 və ya 6 rəqəm və ya hərfdən başlayır aəvvəl f.

Beləliklə, kodun başlanğıcını yoxlayaq:

^#

Sonra etibarlı simvolların diapazonunu yoxlayırıq:

Bundan sonra, icazə verilən kodun uzunluğunu yoxlayırıq (3 və ya 6 ola bilər). Normal ifadənin tam kodu aşağıdakı kimi olacaq:

^#(({3}$)|({6}$))

Burada məntiqi operatordan istifadə edərək əvvəlcə #123 formanın kodunu, sonra isə #123456 formasının kodunu yoxlayırıq. Normal ifadə ilə yoxlamaq üçün son PHP kodu belə görünür:

3) Müştəri e-poçtunu müntəzəm ifadədən istifadə edərək təsdiqləyin
İndi gəlin normal ifadələrdən istifadə edərək e-poçt ünvanını necə doğrulaya biləcəyimizi görək. Əvvəlcə e-poçt ünvanlarının aşağıdakı nümunələrini diqqətlə nəzərdən keçirin:

[email protected] [email protected] [email protected]

Gördüyümüz kimi, @ simvolu e-poçt ünvanında tələb olunan elementdir. Bundan əlavə, bu elementdən əvvəl və sonra bir neçə simvol dəsti olmalıdır. Daha doğrusu, onun ardınca etibarlı domen adı gəlməlidir.

Beləliklə, birinci hissə hərflər, rəqəmlər və ya _- kimi bəzi xüsusi simvollardan ibarət sətir olmalıdır. . Şablonda bunu belə yaza bilərik:

^+

Domen adında həmişə ad və tld var ( yüksək səviyyəli domen) – yəni domen zonası. Domen zonası .com , .ua , .info və s. Bu o deməkdir ki, domen üçün regex nümunəsi belə görünəcək:

+\.{2,5}$

İndi hər şeyi bir araya gətirsək, e-poçt ünvanını təsdiqləmək üçün tam regex nümunəsini əldə edirik:

^[email protected]+\.{2,5}$

PHP kodunda bu yoxlama belə görünəcək:

Ümid edirik ki, bugünkü məqalə PHP-də müntəzəm ifadələrlə tanış olmağa kömək etdi və öz PHP skriptinizdə müntəzəm ifadələrdən istifadə edərkən praktiki nümunələr sizin üçün faydalı olacaqdır.

qarışıq preg_match(sətir nümunəsi, sətir mövzusu [, massiv və uyğunluqlar [, int bayraqları [, int ofset]]])

Nümunə ilə uyğunluqlar üçün verilmiş mətn mövzusunu axtarır

Əgər əlavə uyğunluqlar parametri göstərilibsə, o, axtarış nəticələri ilə doldurulacaq. $matches elementi bütün nümunənin meydana gəlməsinə uyğun gələn sətir hissəsini, $sətirin birinci alt modelə uyğun olan hissəsini və s.

bayraqlar aşağıdakı dəyərləri qəbul edə bilər:

PREG_OFFSET_CAPTURE

Bu bayraq müəyyən edilərsə, tapılan hər bir alt sətir üçün onun mənbə sətirindəki mövqeyi göstəriləcəkdir. Yadda saxlamaq lazımdır ki, bu bayraq qaytarılan məlumatların formatını dəyişir: hər bir hadisə massiv kimi qaytarılır, onun sıfır elementi tapılmış alt sətiri, birinci element isə ofseti ehtiva edir. Bu bayraq PHP 4.3.0 və sonrakı versiyalarda mövcuddur.

Əlavə bayraqlar parametri PHP 4.3.0-dan bəri mövcuddur.

Axtarış xəttin əvvəlindən soldan sağa aparılır. Əlavə ofset parametri axtarış üçün alternativ başlanğıc mövqeyini təyin etmək üçün istifadə edilə bilər. Əlavə ofset parametri PHP 4.3.3-dən etibarən mövcuddur.

Şərh: Ofset parametrindən istifadə funksiyanı çağırarkən uyğun sətri substr($subject, $offset) ilə əvəz etməyə bərabər deyil. preg_match_all(), çünki nümunə kimi şərtləri ehtiva edə bilər ^ , $ və ya (? . Müqayisə edin:

Bu nümunə isə

Funksiya preg_match() tapılan uyğunluqların sayını qaytarır. 0 (uyğunluq tapılmadı) və 1 ola bilər, çünki preg_match() tapılan ilk uyğunluqdan sonra sona çatır. Bütün uyğunluqları tapmaq və ya saymaq lazımdırsa, funksiyadan istifadə etməlisiniz preg_match_all(). Funksiya preg_match() qayıdır YANLIŞ icra zamanı hər hansı səhvlər baş verdikdə.

İpucu: Funksiyadan istifadə etməyin preg_match(), verilmiş sətirdə alt sətirin olub-olmadığını yoxlamaq istəyirsinizsə. Bunun üçün istifadə edin strpos() və ya strstr(), çünki onlar bu tapşırığı daha tez yerinə yetirəcəklər.


Misal 2: Mətndə "veb" sözünün tapılması

/*
Naxışdakı xüsusi \b ​​ardıcıllığı söz sərhədi deməkdir,
buna görə də "veb" sözünün yalnız təcrid olunmuş halı uyğun gəlir
maska, "torun" və ya "hörümçək torundan" fərqli olaraq.
*/
əgər (preg_match("/\bweb\b/i" , "PHP seçdiyiniz veb skript dilidir.")) {
əks-səda "Giriş tapıldı.";
) başqa (
əks-səda "Giriş tapılmadı.";
)preg_match("/\bweb\b/i", "PHP veb sayt skript dilidir.")) {
əks-səda "Giriş tapıldı.";
) başqa (
əks-səda "Giriş tapılmadı.";
}
?>