PHP တွင် Regular Expression အသုံးပြု၍ Lookahead

တစ်ခါတစ်ရံ ဤကဲ့သို�့သော အလုပ်မျိုးကို ဖြေရှင်းရန် လိုအပ်ပါသည်။ စာကြောင်း 'aaa' ကို ရှာပြီး '!' နှင့် အစားထိုးပါ၊ သို့သော် 'aaa' ၏ နောက်တွင် 'x' ရှိမှသာ၊ ထို'x' ကိုမူ အစားမထိုးပါ။ အကယ်၍ ဤအလုပ်ကို တိုက်ရိုက် ဖြေရှင်းရန် ကြိုးစားပါက အောင်မြင်မည် မဟုတ်ပါ။

php<?php
  preg_replace('#aaax#', '!', 'aaax'); // '!' ဖြစ်လာမည်၊ '!x' ဖြစ်ရမည်
?>

ဤအလုပ်ကို ဖြေရှင်းရန် 'x' ကို အစားမထိုးရန် ပြောဆိုနိုင်သော နည်းလမ်း လိုအပ်ပါသည်။ ထိုသို့ပြုလုပ်ရန် ကွင်းစကွင်းပိတ် အထူး (?= ) ကို အသုံးပြုပါသည်၊ ၎င်းတို့သည် ရှေ့ကကြည့်ရုံသာကြည့်ပြီး ယူသွားခြင်း မပြုပါ။

ဤကွင်းခေါင်းများကို အပြုသဘော ရှေ့ကြိုကြည့်ခြင်း (Positive Lookahead) ဟုခေါ်ပါသည်။ အပြုသဘော - အဘယ်ကြောင့်ဆိုသော် 'x' (ကျွန်ုပ်တို့၏ အခြေအနေတွင်) ရှိရမည် - ထိုအခါမှသာ အစားထိုးမှု ဖြစ်ပေါ်မည်။

ကျွန်ုပ်တို့၏ အလုပ်ကို ဖြေရှင်းရန် ဤကွင်းခေါင်းများကို အသုံးပြုကြပါစို့။

php<?php
  preg_replace('#aaa(?=x)#', '!', 'aaax'); // '!x' ကို ပြန်ပေးမည်
?>

အပျက်သဘော ရှေ့ကြိုကြည့်ခြင်း (Negative Lookahead) လည်း ရှိပါသည် - (?! ) - ၎င်းသည် ဆန့်ကျင်ဘက်အားဖြင့် တစ်စုံတစ်ခု မရှိရမည်ဟု ပြောပါသည်။ နောက်ဥပမာတွင် အစားထိုးမှုသည် 'aaa' ၏ နောက်တွင် 'x' မရှိမှသာ ဖြစ်ပေါ်မည်။

php<?php
  preg_replace('#aaa(?!x)#', '!', 'aaab'); // '!b' ကို ပြန်ပေးမည်
?>
Задание 1

ဖန်ရှင်အမည်များ ပါဝင်သော စာကြောင်းတစ်ခု ရှိသည်။

php<?php
  $str = 'func1() func2() func3()';
?>

စာကြောင်းမှ ဖန်ရှင်အမည်များ ပါဝင်သော ခင်းကျင်းချက် (array) တစ်ခုရယူပါ။

Задание 2

tag တစ်ခုပါဝင်သော စာကြောင်းတစ်ခု ရှိသည်။

php<?php
  $str = '<a href="" class="eee" id="zzz">';
?>

ထို tag ၏ attribute အမည်များ ပါဝင်သော ခင်းကျင်းချက် (array) တစ်ခုရယူပါ။