⊗ppPmRgGL 229 of 447 menu

PHP-də requlyar ifadələrin tamahkarlığının məhdudlaşdırılması

Requlyar ifadələr standart olaraq tamahkardır. Bu o deməkdir ki, onlar mümkün olan maksimum sayda simvolu tutur.

Gəlin bir nümunə ilə baxaq. Tutaq ki, bizim belə bir sətirimiz var:

<?php $str = 'aeeex zzz x kkk'; ?>

Tutaq ki, biz bu sətirdə alt sətri 'aeeex' aşağıdakı şablona görə tapmaq istəyirik: hərf 'a', sonra istənilən simvol bir və ya daha çox dəfə, sonra hərf 'x'.

<?php $res = preg_replace('#a.+x#', '!', $str); ?>

Biz gözləyirik ki, dəyişənə nəticədə '! zzz x kkk' sətri yazılsın. Lakin, belə olmur - dəyişənə '! kkk' sətri düşür.

Bütün iş ondadır ki, bizim requlyar ifadəmiz 'a' hərfindən 'x' hərfinə qədər olan bütün simvolları axtarır. Lakin bizim sətirdə iki 'x' hərfi var. Tamahkarlıq səbəbindən requlyar ifadə ən son x-ə qədər axtarır, bununla da gözlədiyimizdən fərqli bir nəticə əldə edir.

Əlbəttə ki, çox vaxt bu davranış bizim üçün lazımdır. Lakin xüsusi bu halda biz tamahkarlığı ləğv etmək və requlyar ifadəyə ilk x-ə qədər axtarmasını demək istərdik.

Tamahkarlığı məhdudlaşdırmaq üçün təkrar operatorundan sonra sual işarəsi qoymaq lazımdır:

<?php $res = preg_replace('#a.+?x#', '!', $str); ?>

Tamahkarlığı bütün təkrar operatorları üçün məhdudlaşdırmaq olar, belə: *?, ??{}?.

Bir sətir verilib:

<?php $str = 'aba accca azzza wwwwa'; ?>

Kənarlarında 'a' hərfləri olan bütün sətirləri tapan və onların hər birini '!' ilə əvəz edən bir requlyar ifadə yazın. a hərfləri arasında istənilən simvol ola bilər ('a' istisna olmaqla).

Azərbaycan
AfrikaansБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Biz saytin işi, analitika və fərdiləşdirmə üçün cookie istifadə edirik. Məlumatların emalı Məxfilik Siyasəti əsasında həyata keçirilir.
hamısını qəbul et konfiqurasiya et rədd et