Злучок унутры набораў у рэгулярках PHP
Злучок - таксама спецсімвал унутры []
(а вось звонку - не). Калі вам патрэбны сам
злучок як сімвал - то пастаўце яго там,
дзе ён не будзе ўспрыняты як падзельнік
групы.
Чаму гэта важна: вы можаце зрабіць групу
сімвалаў, самі не заўважыўшы гэтага. Напрыклад,
вось так - [:-@]
- вы думаеце, што
выбіраеце двукроп'е, злучок і сабачку, а на
самай справе атрымліваецца група сімвалаў паміж
:
і @
. У гэтую групу ўваходзяць
наступныя сімвалы: :
, ;
, ?
,
<
, =
, >
.
Адкуль яны ўзяліся? З табліцы ASCII - двукроп'е мае нумар меншы, чым сабачка - і атрымліваецца група. Гэта значыць усе групы атрымліваюцца па табліцы ASCII (пры жаданні гэтым можна карыстацца).
Як з гэтым змагацца: пастаўце сімвал злучку
там, дзе ён дакладна не будзе ўспрыняты як
сімвал групы, напрыклад, у пачатку або ў канцы
(гэта значыць пасля [
або перад ]
).
Можна таксама заэкранаваць злучок - тады
ён будзе абазначаць сам сябе незалежна ад
пазіцыі. Напрыклад, замест [:-@]
напісаць
[:\-@]
- і групы ўжо не будзе, а
будуць тры сімвалы - двукроп'е, злучок і сабачка @.
Прыклад
У наступным прыкладзе шаблон пошуку такі:
лічба 1
, затым літара ад 'a'
да 'z'
, затым лічба 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
У выніку ў зменную запішацца наступнае:
'! 1-2 ! !'
Прыклад
Давайце цяпер заэкрануем злучок. У выніку
шаблон пошуку такі: лічба 1
, затым
літара 'a'
, або злучок, або літара 'z'
,
затым лічба 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
У выніку ў зменную запішацца наступнае:
'! ! 1c2 !'
Прыклад
Можна проста пераставіць злучок, не экрануючы яго:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
У выніку ў зменную запішацца наступнае:
'! ! 1c2 !'
Прыклад
У наступным прыкладзе шаблон пошуку такі:
першы сімвал - гэта маленькія літары або
злучок '-'
, потым дзве літары 'x'
:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
У выніку ў зменную запішацца наступнае:
'! Axx ! @xx'
Прыклад
У наступным прыкладзе шаблон пошуку такі:
першы сімвал - гэта маленькія, вялікія
літары або злучок '-'
, потым дзве літары
'x'
:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
У выніку ў зменную запішацца наступнае:
'! ! ! @xx'
Прыклад
Можна размясціць злучок паміж двума групамі - там ён дакладна яшчэ не зробіць яшчэ адну групу:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
У выніку ў зменную запішацца наступнае:
'! ! ! @xx'
Практычныя задачы
Дадзены радок:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Знайдзіце ўсе радкі па наступным шаблоне:
літара 'x'
, вялікая або маленькая
літара або злучок, літара 'z'
.
Дадзены радок:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Знайдзіце ўсе радкі па наступным шаблоне:
літара 'x'
, затым або долар, або
злучок або плюс, потым літара 'z'
.