Tegngrupper i regulære udtryk i PHP
Der findes specielle kommandoer, som gør det muligt
at vælge hele grupper af tegn på én gang. Kommandoen
\d betyder et ciffer fra 0 til 9.
Kommandoen \w betegner et ciffer, et latinsk
bogstav eller underscore-tegnet. Kommandoen \s
betegner et mellemrum eller et whitespace-tegn:
mellemrum, linjeskift, tabulator. Det er muligt
at invertere kommandoens værdi ved at skrive et stort
bogstav: for eksempel, hvis \d er et ciffer,
så er \D et ikke-ciffer.
Eksempel
Lad os finde alle cifre:
<?php
$str = '1 12 123';
$res = preg_replace('#\d#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'! !! !!!'
Eksempel
Gentagelsesoperatorer betragter kommando-grupper
som en helhed, det vil sige grupperingsparenteser
er ikke nødvendige. I det følgende eksempel ser søgemønsteret
sådan ud: ciffer fra 0 til 9
en eller flere gange:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\d+#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'! ! ! abc @@@'
Eksempel
I det følgende eksempel ser søgemønsteret
sådan ud: hvad som helst en eller flere gange,
men ikke et ciffer fra 0 til 9:
<?php
$str = '123abc3@@';
$res = preg_replace('#\D+#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'123!3!'
Eksempel
I dette eksempel ser søgemønsteret sådan ud: whitespace-tegn én gang:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'1!12!123!abc!@@@'
Eksempel
I dette eksempel ser søgemønsteret sådan ud:
IKKE whitespace-tegn en eller flere gange.
Alle understrenge, adskilt af mellemrum, vil blive erstattet
med '!':
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\S+#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'! ! ! ! !'
Eksempel
I dette eksempel ser søgemønsteret sådan ud:
ciffer eller bogstav en eller flere gange.
Alle understrenge, der består af cifre og bogstaver,
vil blive erstattet med '!':
<?php
$str = '1 12 123a Abc @@@';
$res = preg_replace('#\w+#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'! ! ! ! @@@'
Eksempel
I dette eksempel ser søgemønsteret sådan ud:
IKKE ciffer og IKKE bogstav en eller flere gange.
I vores tilfælde falder
'@@@' og alle mellemrum (de er jo heller
ikke cifre eller bogstaver) under denne definition. Vær opmærksom på
at der til sidst er én '!' - i den
blev strengen ' @@@' transformeret - med
et mellemrum foran:
$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);
Som resultat vil følgende blive skrevet i variablen:
'1!12!123!Abc!'
Praktiske opgaver
Givet en streng:
<?php
$str = 'a1a a2a a3a a4a a5a aba aca';
?>
Skriv et regulært udtryk, der finder strenge,
hvor der står bogstaver 'a' på kanterne,
og mellem dem er der ét ciffer.
Givet en streng:
<?php
$str = 'a1a a22a a333a a4444a a55555a aba aca';
?>
Skriv et regulært udtryk, der finder strenge,
hvor der står bogstaver 'a' på kanterne,
og mellem dem er der et hvilket som helst antal cifre.
Givet en streng:
<?php
$str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>
Skriv et regulært udtryk, der finder strenge,
hvor der står bogstaver 'a' på kanterne,
og mellem dem er der et hvilket som helst antal cifre (herunder
også nul cifre, det vil sige strengen 'aa').
Givet en streng:
<?php
$str = 'avb a1b a2b a3b a4b a5b abb acb';
?>
Skriv et regulært udtryk, der finder strenge
af følgende type: på kanterne står bogstaver
'a' og 'b', og mellem dem - ikke
et tal.
Givet en streng:
<?php
$str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>
Skriv et regulært udtryk, der finder strenge
af følgende type: på kanterne står bogstaver
'a' og 'b', og mellem dem - ikke
et bogstav og ikke et ciffer.
Givet en streng:
<?php
$str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>
Skriv et regulært udtryk, der erstatter alle mellemrum
med '!'.