⊗ppPmRgEP 254 of 447 menu

PHPдеги регулярдуу туюнтмалардагы кармандар

Кармандардын мазмуну алмаштыруу саптарында гана эмес, регулярдуу туюнтманын өзүндө да жеткиликтүү: биз бир нерсени карманга салып, андан кийин так регулярдуу туюнтмада, бул жерде ушул кармандын мазмуну турушу керек деп айта алабыз.

Кармандардын мазмуну алардын номери боюнча жеткиликтүү, ал номердин алдында тескери кысылча турат. Мисалы, нөлдүнчү карман мындайча жеткиликтүү болот: \0, биринчи карман мындайча - \1, экинчи - \2 жана ушундай улантуу.

Жогоруда жазылгандардын баары сиз үчүн азырынча өтө түшүнүксүз болуп көрүнөт деп ишенем. Бул таң калыштуу эмес, анткени кармандар - регулярдуу туюнтмалардын эң түшүнүксүз жери. Келгиле, мисалдар аркылуу түшүнүп көрөлү.

Мисал

Анда бизде мындай сап бар деп коёлу:

<?php $str = 'aa bb cd ef'; ?>

Келгиле, андан бири-бирине дал келген каалаган эки тамга турган бардык жерлерди табалы. Маселени чечүү үчүн каалаган тамганы издеп, аны карманга салабыз, андан кийин кийинки символ катары ушул кармандын мазмуну келеби же жокпу текшеребиз:

<?php $res = preg_replace('#([a-z])\1#', '!', $str); ?>

Натыйжада өзгөрмөгө төмөнкүдөй жазылат:

'! ! cd ef'

Мисал

Анда бизде мындай сап бар деп коёлу:

<?php $str = 'asxca buzxb csgd'; ?>

Келгиле, андан биринчи жана акыркы тамгалары бирдей бардык сөздөрдү табалы. Чечүү үчүн төмөнкүдөй үлгү жазабыз: тамга, андан кийин дагы бир же бир нече тамга, андан кийин биринчи тамга сыяктуу эле тамга:

<?php $res = preg_replace('#([a-z])[a-z]+\1#', '!', $str); ?>

Натыйжада өзгөрмөгө төмөнкүдөй жазылат:

'! ! csgd'

Мисал

\1 ордуна \g1 жаза аласыз:

<?php $res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str); ?>

Мисал

Ошондой эле \g{1} жаза аласыз:

<?php $res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str); ?>

Мисал

Жаалуу кашааларда терс сандарды көрсөтсө болот. Бул учурда кармандар аягынан эсептелет:

<?php $res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str); ?>

Практикалык маселелер

Сап берилди:

<?php $str = 'aaa bbb ccc xyz'; ?>

Бири-биринин артынан үч ошол эле тамга турган бардык кошумча саптарды табыңыз.

Сап берилди:

<?php $str = 'a aa aaa abab bbbb'; ?>

Бири-биринин артынан эки же андан көп ошол эле тамга турган бардык кошумча саптарды табыңыз.

Сап берилди:

<?php $str = 'aaa aaa bbb bbb ccc ddd'; ?>

Бири-биринин артынан эки ошол эле сөз турган бардык кошумча саптарды табыңыз.

Кыргызча
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 файлдарын колдонобуз. Маалыматтарды иштетүү Маалыматты коргоо саясаты боюнча жүргүзүлөт.
баарын кабыл алуу ыңгайлаштыруу четке кагуу