Teckengrupper i reguljära uttryck i PHP
Det finns speciella kommandon som gör det möjligt
välja hela grupper av tecken på en gång. Kommandot
\d betyder siffra från 0 till 9.
Kommandot \w betecknar siffra, latinsk
bokstav eller understreck. Kommandot \s
betecknar mellanslag eller blanktecken:
mellanslag, radbrytning, tabbstopp. Det går att
invertera kommandots värde genom att skriva stor
bokstav: till exempel, om \d är en siffra,
så är \D inte en siffra.
Exempel
Låt oss hitta alla siffror:
<?php
$str = '1 12 123';
$res = preg_replace('#\d#', '!', $str);
?>
Som ett resultat kommer följande att skrivas in i variabeln:
'! !! !!!'
Exempel
Upprepningsoperatorer betraktar kommandon-grupper
som en helhet, det vill säga grupperande parenteser
behövs inte. I följande exempel ser sökmönstret
ut så här: siffra från 0 till 9
en eller flera gånger:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\d+#', '!', $str);
?>
Som ett resultat kommer följande att skrivas in i variabeln:
'! ! ! abc @@@'
Exempel
I följande exempel ser sökmönstret ut
så här: vad som helst en eller flera gånger,
men inte siffra från 0 till 9:
<?php
$str = '123abc3@@';
$res = preg_replace('#\D+#', '!', $str);
?>
Som ett resultat kommer följande att skrivas in i variabeln:
'123!3!'
Exempel
I detta exempel ser sökmönstret ut så här: blanktecken en gång:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
Som ett resultat kommer följande att skrivas in i variabeln:
'1!12!123!abc!@@@'
Exempel
I detta exempel ser sökmönstret ut så här:
ICKE blanktecken en eller flera gånger.
Alla delsträngar, separerade med mellanslag, kommer att ersättas
med '!':
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\S+#', '!', $str);
?>
Som ett resultat kommer följande att skrivas in i variabeln:
'! ! ! ! !'
Exempel
I detta exempel ser sökmönstret ut så här:
siffra eller bokstav en eller flera gånger.
Alla delsträngar som består av siffror och bokstäver
kommer att ersättas med '!':
<?php
$str = '1 12 123a Abc @@@';
$res = preg_replace('#\w+#', '!', $str);
?>
Som ett resultat kommer följande att skrivas in i variabeln:
'! ! ! ! @@@'
Exempel
I detta exempel ser sökmönstret ut så här:
ICKE siffra och ICKE bokstav en eller flera gånger.
Enligt denna definition passar i vårt fall
'@@@' och alla mellanslag (de är ju också
varken siffror eller bokstäver). Var uppmärksam på
att det i slutet finns en '!' - i den
förvandlades strängen ' @@@' - med
mellanslag framför:
$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);
Som ett resultat kommer följande att skrivas in i variabeln:
'1!12!123!Abc!'
Praktiska uppgifter
Given en sträng:
<?php
$str = 'a1a a2a a3a a4a a5a aba aca';
?>
Skriv ett reguljärt uttryck som hittar strängar,
där vid kanterna står bokstäverna 'a',
och mellan dem en siffra.
Given en sträng:
<?php
$str = 'a1a a22a a333a a4444a a55555a aba aca';
?>
Skriv ett reguljärt uttryck som hittar strängar,
där vid kanterna står bokstäverna 'a',
och mellan dem valfritt antal siffror.
Given en sträng:
<?php
$str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>
Skriv ett reguljärt uttryck som hittar strängar,
där vid kanterna står bokstäverna 'a',
och mellan dem valfritt antal siffror (inklusive
noll siffror, det vill säga strängen 'aa').
Given en sträng:
<?php
$str = 'avb a1b a2b a3b a4b a5b abb acb';
?>
Skriv ett reguljärt uttryck som hittar strängar
av följande typ: vid kanterna står bokstäverna
'a' och 'b', och mellan dem - inte
en siffra.
Given en sträng:
<?php
$str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>
Skriv ett reguljärt uttryck som hittar strängar
av följande typ: vid kanterna står bokstäverna
'a' och 'b', och mellan dem - inte
en bokstav och inte en siffra.
Given en sträng:
<?php
$str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>
Skriv ett reguljärt uttryck som ersätter alla mellanslag
med '!'.