Krøllete parenteser i regulære uttrykk i PHP
Operatorene +, *, ? er gode,
men med dem kan man ikke spesifisere et eksakt
antall repetisjoner. I dette tilfellet vil
operatoren {} komme til unnsetning.
Den fungerer som følger: {5}
- fem repetisjoner, {2,5} - repeteres
fra to til fem (begge inkludert), {2,}
- repeteres to eller flere ganger.
Eksempel
I dette eksemplet ser søkemønsteret slik ut:
bokstaven 'x', bokstaven 'a' en
eller to ganger, bokstaven 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,2}x#', '!', $str);
?>
Som et resultat vil følgende bli skrevet inn i variabelen:
'xx ! ! xaaax'
Eksempel
I dette eksemplet ser søkemønsteret slik ut:
bokstaven 'x', bokstaven 'a' to
ganger eller mer, bokstaven 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{2,}x#', '!', $str);
?>
Som et resultat vil følgende bli skrevet inn i variabelen:
'xx xax ! !'
Eksempel
I dette eksemplet ser søkemønsteret slik ut:
bokstaven 'x', bokstaven 'a' tre
ganger, bokstaven 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{3}x#', '!', $str);
?>
Som et resultat vil følgende bli skrevet inn i variabelen:
'xx xax xaax !'
Eksempel
I dette eksemplet ser søkemønsteret slik ut:
bokstaven 'a' ti ganger:
<?php
$str = 'aaa aaaaaaaaaa aaa';
$res = preg_replace('#a{10}#', '!', $str);
?>
Som et resultat vil følgende bli skrevet inn i variabelen:
'aaa ! aaa'
Eksempel
I dette eksemplet ønsket forfatteren av koden et slikt mønster:
bokstaven 'x', bokstaven 'a' tre
ganger eller mindre, bokstaven 'x',
men dessverre fungerer ikke dette - {,3} -.
Man må spesifisere eksplisitt:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,3}x#', '!', $str);
?>
Som et resultat vil følgende bli skrevet inn i variabelen:
'xx ! ! !'
Eksempel
Null er også tillatt:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{0,3}x#', '!', $str);
?>
Som et resultat vil følgende bli skrevet inn i variabelen:
'! ! ! !'
Praktiske oppgaver
Gitt en streng:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Skriv et regulært uttrykk som vil finne strengene
'abba', 'abbba', 'abbbba'
og bare dem.
Gitt en streng:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Skriv et regulært uttrykk som vil finne strenger
av typen 'aba', der 'b' forekommer
mindre enn tre ganger (inkludert).
Gitt en streng:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Skriv et regulært uttrykk som vil finne strenger
av typen 'aba', der 'b' forekommer
mer enn fire ganger (inkludert).