PHP හි රෙගුලරු ප්‍රකාශනයේ කැපූ පැකිට්

කැපූ පැකිට් වල අන්තර්ගතය ප්‍රතිස්ථාපන කතාවට පමණක් නොව රෙගුලරු ප්‍රකාශනය තුළත් ප්‍රවේශ විය හැකිය: අපට යමක් කැපූ පැකිට් එකක තැබිය හැකිය, ඉන්පසු රෙගුලරු ප්‍රකාශනය තුළම පැවසිය හැකිය, මෙහි එම කැපූ පැකිට් එකේ අන්තර්ගතය තිබිය යුතු බව.

කැපූ පැකිට් වල අන්තර්ගතය ඒවායේ අංක මගින් ප්‍රවේශ විය හැකිය, ඒවාට පෙර පසුපස ආඛ්‍යාරයක් ඇත. උදාහරණයක් වශයෙන්, ශුන්‍ය කැපූ පැකිට් ප්‍රවේශ වන්නේ මෙලෙසය: \0, පළමු කැපූ පැකිට් මෙලෙස - \1, දෙවැන්න - \2 සහ එසේම.

ඉහත ලියා ඇති සියල්ල ඔබට මෙතෙක් ඉතා අපැහැදිලි යැයි මම විශ්වාස කරමි. එය පුදුමයක් නොවේ, මන්ද කැපූ පැකිට් යනු රෙගුලරු ප්‍රකාශනවල අඩුම තේරුම් ගත හැකි ස්ථානයයි. අපි උදාහරණ මගින් තේරුම් ගනිමු.

උදාහරණය

අපට මෙවැනි නූලක් ඇති යැයි සිතමු:

php<?php
  $str = 'aa bb cd ef';
?>

අපි එහි අකුරු දෙකක් එකිනෙකට සමාන වන සියලුම ස්ථාන සොයා ගනිමු. ගැටළුව විසඳීම සඳහා අපි ඕනෑම අකුරක් සොයා, එය කැපූ පැකිට් එකක තබා, ඉන්පසු පරීක්ෂා කරන්න, ඊළඟ අක්ෂරය එම කැපූ පැකිට් එකේ අන්තර්ගතය ද යන්න:

php<?php
  $res = preg_replace('#([a-z])\1#', '!', $str);
?>

ප්‍රතිඵලයක් වශයෙන් විචල්‍යයට පහත දේ ලියා ඇත:

php'! ! cd ef'

උදාහරණය

අපට මෙවැනි නූලක් ඇති යැයි සිතමු:

php<?php
  $str = 'asxca buzxb csgd';
?>

අපි එහි පළමු සහ අවසාන අකුරු සමාන වන සියලුම වචන සොයා ගනිමු. විසඳුම සඳහා ගැටළුව අපි පහත ආකෘතිය ලියන්නෙමු: අකුර, ඉන්පසු තවත් එකක් හෝ වැඩි ගණනක් අකුරු, ඉන්පසු එකම අකුර පළමු එක වැනි:

php<?php
  $res = preg_replace('#([a-z])[a-z]+\1#', '!', $str);
?>

ප්‍රතිඵලයක් වශයෙන් විචල්‍යයට පහත දේ ලියා ඇත:

php'! ! csgd'

උදාහරණය

\1 වෙනුවට \g1 ලිවිය හැකිය:

php<?php
  $res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str);
?>

උදාහරණය

එසේම \g{1} ලිවිය හැකිය:

php<?php
  $res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str);
?>

උදාහරණය

කැඩුණු වරහන් තුළ, සෘණ සංඛ්‍යා දැක්විය හැකිය. මෙම අවස්ථාවේදී, කැපූ පැකිට් ගණන් කරනු ලබන්නේ අවසානයේ සිට:

php<?php
  $res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str);
?>

ප්‍රායෝගික කාර්යයන්

Задание 1

නූලක් ලබා දී ඇත:

php<?php
  $str = 'aaa bbb ccc xyz';
?>

එකිනෙකට අනුක්‍රමිකව එකම අකුරු තුනක් අඩංගු සියලුම උපනූල් සොයන්න.

Задание 2

නූලක් ලබා දී ඇත:

php<?php
  $str = 'a aa aaa abab bbbb';
?>

එකිනෙකට අනුක්‍රමිකව දෙකක් හෝ වැඩි ගණනක් එකම අකුරු අඩංගු සියලුම උපනූල් සොයන්න.

Задание 3

නූලක් ලබා දී ඇත:

php<?php
  $str = 'aaa aaa bbb bbb ccc ddd';
?>

එකිනෙකට අනුක්‍රමිකව සමාන වචන දෙකක් අඩංගු සියලුම උපනූල් සොයන්න.