Դիրքային պարամետրեր PHP-ի կանոնավոր արտահայտություններում
Դիրքային պարամետրերի պարունակությունը հասանելի է ոչ միայն փոխարինման տողում, այլև հենց կանոնավոր արտահայտության մեջ. մենք կարող ենք ինչ-որ բան դնել դիրքային պարամետրում, ապա հենց կանոնավոր արտահայտության մեջ ասել, որ այստեղ պետք է լինի այդ դիրքային պարամետրի պարունակությունը:
Դիրքային պարամետրերի պարունակությունը հասանելի է ըստ նրանց համարների,
որոնցից առաջ դրվում է հակադարձ շեղ: Օրինակ,
զրոյական դիրքային պարամետրը կլինի հասանելի այսպես. \0,
առաջին դիրքային պարամետրը այսպես - \1, երկրորդը
- \2 և այլն:
Համոզված եմ, որ վերևում գրվածը առայժմ շատ անհասկանալի է ձեզ համար: Սա զարմանալի չէ, քանի որ դիրքային պարամետրերը կանոնավոր արտահայտությունների ամենադժվար հասկանալու տեղն են: Եկեք օրինակներով հասկանանք:
Օրինակ
Ենթադրենք ունենք այսպիսի տող:
<?php
$str = 'aa bb cd ef';
?>
Եկեք գտնենք դրանում բոլոր այն տեղերը, որտեղ կան երկու նույնական տառներ հաջորդաբար: Խնդիրը լուծելու համար կփնտրենք ցանկացած տառ, կդնենք այն դիրքային պարամետրում, ապա կստուգենք, արդյոք հաջորդ նիշը այդ դիրքային պարամետրի պարունակությունն է:
<?php
$res = preg_replace('#([a-z])\1#', '!', $str);
?>
Արդյունքում փոփոխականի մեջ կգրվի հետևյալը:
'! ! cd ef'
Օրինակ
Ենթադրենք ունենք այսպիսի տող:
<?php
$str = 'asxca buzxb csgd';
?>
Եկեք գտնենք դրանում բոլոր այն բառերը, որոնցում նույնն են առաջին և վերջին տառերը: Խնդիրը լուծելու համար կգրենք հետևյալ կաղապարը. տառ, ապա ևս մեկ կամ ավելի տառ, ապա նույն տառը, ինչպես առաջինը:
<?php
$res = preg_replace('#([a-z])[a-z]+\1#', '!', $str);
?>
Արդյունքում փոփոխականի մեջ կգրվի հետևյալը:
'! ! csgd'
Օրինակ
\1-ի փոխարեն կարելի է գրել \g1:
<?php
$res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str);
?>
Օրինակ
Կարելի է նաև գրել \g{1}:
<?php
$res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str);
?>
Օրինակ
Ճաղավոր փակագծերում կարելի է նշել բացասական թվեր: Այս դեպքում դիրքային պարամետրերը կհաշվվեն վերջից:
<?php
$res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str);
?>
Գործնական առաջադրանքներ
Տրված է տող.
<?php
$str = 'aaa bbb ccc xyz';
?>
Գտեք բոլոր այն ենթատողերը, որոնցում կան երեք նույնական տառներ հաջորդաբար:
Տրված է տող.
<?php
$str = 'a aa aaa abab bbbb';
?>
Գտեք բոլոր այն ենթատողերը, որոնցում կան երկու կամ ավելի նույնական տառներ հաջորդաբար:
Տրված է տող.
<?php
$str = 'aaa aaa bbb bbb ccc ddd';
?>
Գտեք բոլոր այն ենթատողերը, որոնցում կան երկու նույնական բառեր հաջորդաբար: