⊗ppPmRgEP 254 of 447 menu

Fånggrupper i reguljära uttryck i PHP

Innehållet i fånggrupper är tillgängligt inte bara i ersättningssträngen, utan också i själva det reguljära uttrycket: vi kan lägga någonting i en fånggrupp och sedan direkt i det reguljära uttrycket säga att innehållet i denna fånggrupp ska stå här.

Innehållet i fånggrupper är tillgängligt via deras nummer, före vilka det finns ett omvänt snedstreck. Till exempel, den nollte fånggruppen kommer att vara tillgänglig så här: \0, den första fånggruppen så här - \1, den andra - \2 och så vidare.

Jag är säker på att allt som skrivits ovan för tillfället är ganska oskärt för dig. Det är inte förvånande, eftersom fånggrupper är den mest svårförståeliga delen av reguljära uttryck. Låt oss gå igenom det med exempel.

Exempel

Låt oss säga att vi har en sträng som ser ut så här:

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

Låt oss hitta alla ställen i den där två valfria likadana bokstäver står i rad. För att lösa uppgiften kommer vi att söka efter vilken bokstav som helst, lägga den i en fånggrupp och sedan kontrollera om nästa tecken är innehållet i denna fånggrupp:

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

Som ett resultat kommer följande att skrivas in i variabeln:

'! ! cd ef'

Exempel

Låt oss säga att vi har en sträng som ser ut så här:

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

Låt oss hitta alla ord i den där den första och sista bokstaven är likadana. För att lösa uppgiften skriver vi följande mönster: bokstav, sedan en eller fler bokstäver till, och sedan samma bokstav som den första:

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

Som ett resultat kommer följande att skrivas in i variabeln:

'! ! csgd'

Exempel

Istället för \1 kan man skriva \g1:

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

Exempel

Man kan också skriva \g{1}:

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

Exempel

I klammerparenteser kan negativa tal anges. I detta fall kommer fånggrupper att räknas från slutet:

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

Praktiska uppgifter

Given en sträng:

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

Hitta alla delsträngar där det finns tre likadana bokstäver i rad.

Given en sträng:

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

Hitta alla delsträngar där det finns två eller fler likadana bokstäver i rad.

Given en sträng:

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

Hitta alla delsträngar där det finns två likadana ord i rad.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa