⊗ppPmRgEP 254 of 447 menu

Įdėtos išraiškos reguliariojoje išraiškoje PHP

Įdėtų išraiškų turinys prieinamas ne tik pakeitimo eilutėje, bet ir pačioje reguliariojoje išraiškoje: mes galime įdėti ką nors į įdėtą išraišką, o tada tiesiog reguliariojoje išraiškoje nurodyti, kad čia turi būti tos įdėtos išraiškos turinys.

Įdėtų išraiškų turinys prieinamas pagal jų numerius, prieš kuriuos rašomas atvirkštinis pasvirasis brūkšnys. Pavyzdžiui, nulinė įdėta išraiška bus prieinama taip: \0, pirmoji įdėta išraiška taip - \1, antroji - \2 ir taip toliau.

Esu tikras, kad viskas, kas parašyta aukščiau, kol kas yra gana neaišku jums. Tai nenuostabu, nes įdėtos išraiškos yra pati sunkiausiai suprantama reguliariųjų išraiškų vieta. Naglindinkime pavyzdžiais.

Pavyzdys

Tarkime, kad turime tokią eilutę:

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

Raskime joje visas vietas, kuriose yra dvi bet kokios vienodos raidės iš eilės. Užduočiai išspręsti ieškosime bet kokios raidės, padėsime ją į įdėtą išraišką, o tada patikrinsime, ar sekantis simbolis yra tos įdėtos išraiškos turinys:

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

Rezultate į kintamąjį bus įrašyta tai:

'! ! cd ef'

Pavyzdys

Tarkime, kad turime tokią eilutę:

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

Raskime joje visus žodžius, kurių pirmoji ir paskutinė raidės yra vienodos. Užduočiai išspręsti parašysime tokį šabloną: raidė, po to dar viena ar daugiau raidžių, o po to tokia pati raidė kaip ir pirmoji:

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

Rezultate į kintamąjį bus įrašyta tai:

'! ! csgd'

Pavyzdys

Vietoj \1 galima rašyti \g1:

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

Pavyzdys

Taip pat galima rašyti \g{1}:

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

Pavyzdys

Garbanotuosiuose skliaustuose galima nurodyti neigiamus skaičius. Tokiu atveju įdėtos išraiškos bus skaičiuojamos nuo galo:

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

Praktinės užduotys

Duota eilutė:

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

Raskite visus poeilutes, kuriuose yra trys vienodos raidės iš eilės.

Duota eilutė:

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

Raskite visus poeilutes, kuriuose yra dvi ar daugiau vienodų raidžių iš eilės.

Duota eilutė:

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

Raskite visus poeilutes, kuriuose yra du vienodi žodžiai iš eilės.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti