Tegngrupper i regulære uttrykk i PHP
Det finnes spesielle kommandoer som tillater
å velge hele tegn grupper på en gang. Kommandoen
\d betyr et siffer fra 0 til 9.
Kommandoen \w betegner et siffer, en latinsk
bokstav eller understrekingstegnet. Kommandoen \s
betegner et mellomrom eller et blanktegn:
mellomrom, linjeskift, tabulator. Du kan
invertere betydningen av kommandoen ved å skrive stor
bokstav: for eksempel, hvis \d er et siffer,
så er \D ikke et siffer.
Eksempel
La oss finne alle sifre:
<?php
$str = '1 12 123';
$res = preg_replace('#\d#', '!', $str);
?>
Resultatet i variabelen vil bli følgende:
'! !! !!!'
Eksempel
Repetisjonsoperatorer betrakter kommando-grupper
som en helhet, det vil si at grupperende parenteser
ikke er nødvendig. I det følgende eksemplet ser
søkemønsteret slik ut: siffer fra 0 til 9
en eller flere ganger:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\d+#', '!', $str);
?>
Resultatet i variabelen vil bli følgende:
'! ! ! abc @@@'
Eksempel
I det følgende eksemplet ser søkemønsteret
slik ut: hva som helst en eller flere ganger,
men ikke et siffer fra 0 til 9:
<?php
$str = '123abc3@@';
$res = preg_replace('#\D+#', '!', $str);
?>
Resultatet i variabelen vil bli følgende:
'123!3!'
Eksempel
I dette eksemplet ser søkemønsteret slik ut: blanktegn én gang:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
Resultatet i variabelen vil bli følgende:
'1!12!123!abc!@@@'
Eksempel
I dette eksemplet ser søkemønsteret slik ut:
IKKE blanktegn en eller flere ganger.
Alle delstrenger, atskilt med mellomrom, vil bli erstattet
med '!':
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\S+#', '!', $str);
?>
Resultatet i variabelen vil bli følgende:
'! ! ! ! !'
Eksempel
I dette eksemplet ser søkemønsteret slik ut:
siffer eller bokstav en eller flere ganger.
Alle delstrenger som består av sifre og bokstaver
vil bli erstattet med '!':
<?php
$str = '1 12 123a Abc @@@';
$res = preg_replace('#\w+#', '!', $str);
?>
Resultatet i variabelen vil bli følgende:
'! ! ! ! @@@'
Eksempel
I dette eksemplet ser søkemønsteret slik ut:
IKKE siffer og IKKE bokstav en eller flere ganger.
I vårt tilfelle passer '@@@' og alle mellomrom (de er jo også
verken sifre eller bokstaver) inn i denne definisjonen. Vær oppmerksom på
at det på slutten er én '!' - den ble til fra
strengen ' @@@' - med
mellomrom foran:
$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);
Resultatet i variabelen vil bli følgende:
'1!12!123!Abc!'
Praktiske oppgaver
Gitt en streng:
<?php
$str = 'a1a a2a a3a a4a a5a aba aca';
?>
Skriv et regulært uttrykk som finner strenger,
hvor det på sidene står bokstaver 'a',
og mellom dem er det ett siffer.
Gitt en streng:
<?php
$str = 'a1a a22a a333a a4444a a55555a aba aca';
?>
Skriv et regulært uttrykk som finner strenger,
hvor det på sidene står bokstaver 'a',
og mellom dem er et hvilket som helst antall sifre.
Gitt en streng:
<?php
$str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>
Skriv et regulært uttrykk som finner strenger,
hvor det på sidene står bokstaver 'a',
og mellom dem er et hvilket som helst antall sifre (inkludert
null sifre, det vil si strengen 'aa').
Gitt en streng:
<?php
$str = 'avb a1b a2b a3b a4b a5b abb acb';
?>
Skriv et regulært uttrykk som finner strenger
av følgende type: på sidene står bokstaver
'a' og 'b', og mellom dem - ikke
et tall.
Gitt en streng:
<?php
$str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>
Skriv et regulært uttrykk som finner strenger
av følgende type: på sidene står bokstaver
'a' og 'b', og mellom dem - ikke
bokstav og ikke siffer.
Gitt en streng:
<?php
$str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>
Skriv et regulært uttrykk som erstatter alle mellomrom
med '!'.