Kriips sisesetes hulkades PHP regulaaravaldistes
Kriips - samuti erisümbol siseselt []
(väljaspool aga - mitte). Kui teil on vaja kriipsu kui sümbolit - asetage see sinna,
kus seda ei mõisteta rühmaeraldajana.
Miks see on oluline: võite teha sümbolite rühma,
isegi seda märkamata. Näiteks
nii - [:-@] - te arvate, et
valite koolon, kriipsu ja @-märgi, kuid
tegelikult saadakse sümbolite rühm vahemikus
: kuni @. Sellesse rühma kuuluvad
järgmised sümbolid: :, ;, ?,
<, =, >.
Kust need tulid? ASCII tabelist - koolonil on väiksem number kui @-märgil - ja sellest saab rühm. See tähendab, et kõik rühmad saadakse ASCII tabeli järgi (soovi korral seda saab kasutada).
Kuidas sellega toime tulla: asetage kriipsu sümbol
sinna, kus seda kindlasti ei mõisteta kui
rühma sümbolit, näiteks alguses või lõpus
(see tähendab pärast [ või enne ]).
Võite ka kriipsu ekraanida (escape) - siis
see tähistab iseennast sõltumata
positsioonist. Näiteks [:-@] asemel kirjutada
[:\-@] - ja rühma enam ei teki, vaid
on kolm sümbolit - koolon, kriips ja @-märk.
Näide
Järgmises näides on otsimismustriks:
number 1, seejärel täht vahemikus 'a'
kuni 'z', seejärel number 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
Tulemusena kirjutatakse muutujasse järgmine:
'! 1-2 ! !'
Näide
Ekraanime nüüd kriipsu. Tulemusena
on otsimismustriks: number 1, seejärel
täht 'a', või kriips, või täht 'z',
seejärel number 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
Tulemusena kirjutatakse muutujasse järgmine:
'! ! 1c2 !'
Näide
Võite lihtsalt kriipsu ümber paigutada, seda ekraanimata:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
Tulemusena kirjutatakse muutujasse järgmine:
'! ! 1c2 !'
Näide
Järgmises näides on otsimismustriks:
esimene sümbol - see on väiketähed või
kriips '-', siis kaks tähte 'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
Tulemusena kirjutatakse muutujasse järgmine:
'! Axx ! @xx'
Näide
Järgmises näides on otsimismustriks:
esimene sümbol - see on väike- või suurtähed
või kriips '-', siis kaks tähte 'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
Tulemusena kirjutatakse muutujasse järgmine:
'! ! ! @xx'
Näide
Võite asetada kriipsu kahe rühma vahele - seal kindlasti ei moodusta see uut rühma:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
Tulemusena kirjutatakse muutujasse järgmine:
'! ! ! @xx'
Praktilised ülesanded
Antud on sõne:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Leia kõik sõned järgmise mustri järgi:
täht 'x', suur või väike
täht või kriips, täht 'z'.
Antud on sõne:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Leia kõik sõned järgmise mustri järgi:
täht 'x', siis kas dollar, või
kriips või pluss, seejärel täht 'z'.