⊗ppPmRgGL 229 of 447 menu

PHP тіліндегі реттік өрнектердің ашкөздігін шектеу

Реттік өрнектер әдепкі бойынша ашкөз болады. Бұл олардың мүмкін болатын максималды символдар санын ұстайтынын білдіреді.

Мысалмен қарастырайық. Бізде мынадай жол бар делік:

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

Бұл жолдан біз 'aeeex' ішкі жолын мына үлгі бойынша тапқымыз келеді: 'a' әрпі, содан кейін кез келген таңба бір немесе одан да көп рет, содан кейін 'x' әрпі.

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

Біз нәтижеде айнымалыға '! zzz x kkk' жолы жазылады деп күтеміз. Алайда, бұл олай емес - айнымалыға '! kkk' жолы түседі.

Мәселе мынада, біздің реттік өрнек 'a' әріпінен 'x' әріпіне дейінгі барлық таңбаларды іздейді. Бірақ біздің жолда екі 'x' әрпі бар. Ашкөздікten болғандықтан, реттік өрнек соңғы 'x' әрпіне дейін іздейді, осылайша біз күткеннен басқа нәрсені ұстап алады.

Әрине, көбінесе мінездеменің дәл осылай болуы бізге қажет. Бірақ дәл осы жағдайда біз ашкөздікті өшіргіміз келіп, реттік өрнекке бірінші 'x' әрпіне дейін іздеуді айтамыз.

Ашкөздікті шектеу үшін, қайталау операторының артына сұрақ белгісі қою керек:

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

Ашкөздікті барлық қайталау операторларына мынадай шектеуге болады: *?, ?? және {}?.

Мына жол берілген:

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

Шеттерінде 'a' әрпі тұрған барлық жолдарды табатын реттік өрнек жазыңыз және олардың әрқайсысын '!'-ке ауыстырыңыз. a әріптерінің арасында кез келген таңба болуы мүмкін ('a' әрпіннен басқа).

Қазақ
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČ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
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау