Tegnsæt i regulære udtryk i PHP
Tegngrupperne \d og \w er ikke
særlig fleksible. Selv en så simpel opgave
som at finde alle bogstaver, men ikke tal -
kan ikke løses af dem. Til sådanne opgaver
skal man bruge kantede parenteser, som repræsenterer
en ELLER-operation.
Kantede parenteser erstatter et enkelt tegn,
ethvert af de, der er angivet indeni. For eksempel,
sådan her: #x[abc]x# - siger vi, at
der skal stå x'er på siderne, og indeni
- et tegn: enten 'a', eller 'b',
eller 'c'.
Efter kantede parenteser kan man skrive gentagelsesoperatorer.
For eksempel, sådan her: #x[abc]+x#
- siger vi, at der inden for x'erne kan være
et hvilket som helst antal tegn 'a', 'b'
og 'c' - i alle kombinationer.
Man kan ikke kun opremse tegn, men også oprette
tegn grupper ved at skrive mellem to tegn
en bindestreg. For eksempel, sådan her: #[a-d]#
- får vi alle tegn fra 'a' til
'd'.
Lad os se på eksempler.
Eksempel
I dette eksempel ser søgemønsteret sådan ud:
mellem x'er ethvert bogstav fra 'a'
til 'z':
<?php
$str = 'xax xbx xcx x@x';
$res = preg_replace('#x[a-z]x#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'! ! ! x@x'
Eksempel
I dette eksempel ser søgemønsteret sådan ud:
mellem x'er ethvert bogstav fra 'a'
til 'k':
<?php
$str = 'xax xbx xmx x@x';
$res = preg_replace('#x[a-k]x#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'! ! xmx x@x'
Eksempel
I dette eksempel ser søgemønsteret sådan ud:
mellem x'er ethvert bogstav fra 'A'
til 'Z':
<?php
$str = 'xax xBx xcx x@x';
$res = preg_replace('#x[A-Z]x#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'xax ! xcx x@x'
Eksempel
I dette eksempel ser søgemønsteret sådan ud:
mellem x'er ethvert tal fra 0 til 9:
<?php
$str = 'xax x1x x3x x5x x@x';
$res = preg_replace('#x[0-9]x#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'xax ! ! ! x@x'
Eksempel
I dette eksempel ser søgemønsteret sådan ud:
mellem x'er ethvert tal fra 3 til 7:
<?php
$str = 'xax x1x x3x x5x x@x';
$res = preg_replace('#x[3-7]x#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'xax x1x ! ! x@x'
Eksempel
I dette eksempel ser søgemønsteret sådan ud:
mellem x'er ethvert bogstav fra 'a'
til 'z' eller tal fra 1 til 9:
<?php
$str = 'xax x1x x3x x5x x@x';
$res = preg_replace('#x[a-z1-9]x#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'! ! ! ! x@x'
Eksempel
I dette eksempel ser søgemønsteret sådan ud:
mellem x'er ethvert bogstav fra 'a'
til 'z' eller bogstav fra 'A' til
'Z':
<?php
$str = 'xax xBx xcx x5x x@x';
$res = preg_replace('#x[a-zA-Z]x#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'! ! ! x5x x@x'
Eksempel
I dette eksempel ser søgemønsteret sådan ud:
mellem x'er ethvert bogstav fra 'a'
til 'z' eller tallene 1, 2:
<?php
$str = 'xax xbx x1x x2x x3x';
$res = preg_replace('#x[a-z12]x#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'! ! ! ! x3x'
Eksempel
I dette eksempel ser søgemønsteret sådan ud:
mellem x'er bogstaver fra 'a' til 'z'
i en mængde fra 1 og derover:
<?php
$str = 'xx xabesx xaadx x123x xa3x';
$res = preg_replace('#x[a-z]+x#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'xx ! ! ! x123x xa3x'
Eksempel
Lad os gøre så antallet af bogstaver også kan være nul:
<?php
$str = 'xx xabesx xaadx x123x xa3x';
$res = preg_replace('#x[a-z]*x#', '!', $str);
?>
Som resultat vil følgende blive skrevet i variablen:
'! ! ! x123x xa3x'
Praktiske opgaver
Givet en streng:
<?php
$str = 'aba aea aca aza axa';
?>
Skriv et regulært udtryk, der finder efter følgende
mønster: der er bogstaver 'a' på siderne,
og mellem dem - bogstavet 'b', 'e'
eller 'x'.
Givet en streng:
<?php
$str = 'a1a a3a a7a a9a aba';
?>
Skriv et regulært udtryk, der finder efter følgende
mønster: der er bogstaver 'a' på siderne,
og mellem dem - et tal fra 3-ere til 6-taller.
Givet en streng:
<?php
$str = 'aba aea afa aha aga';
?>
Skriv et regulært udtryk, der finder efter følgende
mønster: der er bogstaver 'a' på siderne,
og mellem dem - et bogstav fra a til g.
Givet en streng:
<?php
$str = 'aba aea afa aha aga';
?>
Skriv et regulært udtryk, der finder efter følgende
mønster: der er bogstaver 'a' på siderne,
og mellem dem - et bogstav fra a til f og fra j til z.
Givet en streng:
<?php
$str = 'aAa aea aEa aJa a3a';
?>
Skriv et regulært udtryk, der finder efter følgende
mønster: der er bogstaver 'a' på siderne,
og mellem dem - et bogstav fra a til f og fra A til D.
Givet en streng:
<?php
$str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>
Skriv et regulært udtryk, der finder efter følgende
mønster: der er bogstaver 'a' på siderne,
og mellem dem - små latinske bogstaver,
uden at påvirke de andre.
Givet en streng:
<?php
$str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>
Skriv et regulært udtryk, der finder efter følgende
mønster: der er bogstaver 'a' på siderne,
og mellem dem - små og store latinske
bogstaver, uden at påvirke de andre.
Givet en streng:
<?php
$str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>
Skriv et regulært udtryk, der finder efter følgende
mønster: der er bogstaver 'a' på siderne,
og mellem dem - små latinske bogstaver
og tal, uden at påvirke de andre.