PHP တွင် MB_EREGI_replace သည် Multibyte ကြိုးများအတွက်ပုံမှန်အစားထိုးလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်းသည် POSIX ပုံမှန်စကားရပ် syntax အပေါ် အခြေခံ. PCRE ( PREG_ * စီးရီးလုပ်ဆောင်ချက်များ) ကဲ့သို့သောအုပ်စုဖွဲ့ခြင်းအားမထောက်ခံပါ။ အမည်ခံအုပ်စုသည်ပုံမှန်အသုံးအနှုန်းများအချို့အစိတ်အပိုင်းများအတွက်အဓိပ္ပါယ်ရှိသောအမည်များကိုကျင့်သုံးခြင်းနှင့်စာဖတ်ခြင်းကိုလွယ်ကူချောမွေ့စေသည်။
MB_EREGI_replace သည် အုပ်စုဖွဲ့ခြင်းအမည်ရှိသည့်နေရာများအားမထောက်ပံ့သော်လည်းအမည်ရှိအုပ်စု၏အကျိုးသက်ရောက်မှုကိုမည်သို့တုပနိုင်မည်နည်းကိုမိတ်ဆက်ပေးလိမ့်မည်။
MB_ereGi_replace မှအသုံးပြုသောပုံမှန် syntax သည် PCRE ပုံစံကိုမပံ့ပိုးပါ ။
ဥပမာ -
$pattern = '([a-z]+)'; // ပုံမှန်အုပ်စုဖွဲ့
သို့သော်၎င်းကိုရေးသား။ မရပါ။
$pattern = '(?<word>[a-z]+)'; // အမည်ရှိအုပ်စုဖွဲ့ကိုမထောက်ပံ့ပါ
ထို့ကြောင့်သင်သည်အဖွဲ့တစ်ဖွဲ့၏အကြောင်းအရာကိုရည်ညွှန်းရန်လိုအပ်ပါက၎င်းကို \ 1 , \ 2 စသည့်ကိန်းဂဏန်းများမှတဆင့်သာညွှန်းနိုင်သည်။
MB_ereGi_replace ကို အုပ်စုလိုက်ကိုတိုက်ရိုက်မသုံးနိုင်ပေမယ့်အုပ်စုဖွဲ့ခြင်းနှင့်အစားထိုးနေစဉ်အတွင်း callback function များကိုပေါင်းစပ်။ တူအောင်ဖန်တီးနိုင်သည်။
သို့သော် MB_eregi_replace ကိုယ်တိုင်တွင် callback version မရှိပါ။ MB_ereg_search စီးရီးလုပ်ဆောင်ချက်များကိုပထမ ဦး ဆုံးအသုံးပြုရန်, အုပ်စုဖွဲ့ခြင်းအကြောင်းအရာများကိုဖမ်းယူရန်, ထို့နောက် PHP တွင်အစားထိုးယုတ္တိဗေဒကိုအကောင်အထည်ဖော်နိုင်သည်။
နမူနာစီးဆင်းမှု
MB_ereg_Seg_Search_init နှင့် MB_ereG_Serearch ကိုသုံးပါ။
ပွဲတစ်ခုစီပြီးနောက်အုပ်စုလိုက်အကြောင်းအရာများကိုကိုယ်တိုင်ရယူပြီးအစားထိုးသည်။
အမည်ရှိအုပ်စုများဖွဲ့စည်းပုံကိုတုပရန် PHP Array များကိုအသုံးပြုပါ။
အောက်ပါကုဒ်သည် MB_ereg_seCearch စီးရီးကို အသုံးပြု. အုပ်စုဖွဲ့ခြင်းအကြောင်းအရာများကိုဖမ်းယူရန်မည်သို့အသုံးပြုရမည်,
<?php
// string ကိုဆိုင်းငံ့ထား
$text = "User: alice, Email: alice@example.com";
// POSIX ပုံမှန်စတိုင်ပုံမှန်,အုပ်စုနှစ်စု,အသုံးပြုသူအမည်နှင့်အီးမေးလ်
$pattern = 'User: ([a-z]+), Email: ([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,})';
// ရှာဖွေမှုကိုအစပြုပါ
mb_ereg_search_init($text, $pattern, 'i'); // iအမှုအာရုံမခံစားနိုင်ကြောင်းဖော်ပြသည်
$result = '';
$offset = 0;
while ($match = mb_ereg_search_pos()) {
// ပွဲ၏ start အနေအထားနှင့်အရှည်ယူပါ
list($start, $length) = $match;
// ပြီးပြည့်စုံသောကိုက်ညီ string ကိုရယူပါ
$fullMatch = mb_substr($text, $start, $length);
// ဖမ်းမိအုပ်စုဖွဲ့အကြောင်းအရာကိုရယူပါ
$regs = mb_ereg_search_getregs();
// အုပ်စုလိုက် cyatuing cyatulate
$namedGroups = [
'username' => $regs[1],
'email' => $regs[2],
];
// အစားထိုးယုတ္တိဗေဒကိုင်တွယ်,ဥပမာအားဖြင့်, Username ကိုစာလုံးအကြီး,အီးမေးလ်၏လျှို့ဝှက်ချက်
$replacement = "User: " . strtoupper($namedGroups['username']) . ", Email: " . maskEmail($namedGroups['email']);
// ရလဒ်များ splicing
$result .= mb_substr($text, $offset, $start - $offset) . $replacement;
$offset = $start + $length;
// ဆက်လက်ရှာဖွေပါ
mb_ereg_search_setpos($offset);
}
// ကျန်အစိတ်အပိုင်းများ splicing
$result .= mb_substr($text, $offset);
echo $result;
// ကူညီသူလုပ်ဆောင်ချက်များကို,အီးမေးလ်အပိုင်းကိုဖျောက်ထားပါ
function maskEmail($email) {
$parts = explode('@', $email);
$name = $parts[0];
$domain = $parts[1];
$maskedName = substr($name, 0, 1) . str_repeat('*', max(0, strlen($name) - 2)) . substr($name, -1);
return $maskedName . '@' . $domain;
}
?>
MB_ereGi_replace ကိုတိုက်ရိုက်မသုံးနိုင်သောကြောင့်ကျွန်ုပ်တို့သည် mb_ereg_seg_segearsearch_init နှင့်ဆက်စပ်သောလုပ်ဆောင်ချက်များကို အသုံးပြု. ကွင်းဆက်ကိုက်ညီမှုနှင့်အစားထိုးခြင်းကိုလက်ဖြင့်ကိုင်တွယ်ရန် MB_ereg_search_init နှင့်ဆက်စပ်သောလုပ်ဆောင်ချက်များကိုအသုံးပြုသည်။
Code ကိုရှင်းလင်းရန်ပြင်ဆင်ခြင်းကိုထည့်သွင်းစဉ်းစားရန် $ Regs Array ကိုအသုံးပြုပါ, ကုဒ်ရှင်းလင်းရေးအတွက်ခင်းကျင်းရန်သော့ချက်အမည်များမှတဆင့် "အမည်ရှိအုပ်စု" ကိုတုပပါ။
အစားထိုးလုပ်ငန်းစဉ်ကို PHP Code တွင်လုံးဝကိုင်တွယ်ဖြေရှင်းပြီးယုတ်ညံ့သောရှုပ်ထွေးသောယုတ္တိဗေဒကိုအကောင်အထည်ဖော်နိုင်သည်။
ဥပမာအားဖြင့်အသုံးပြုသူအမည်အရင်းအနှီးနှင့်စာတိုက်ပုံးထဲတွင်စာလုံးအချို့ကိုပုန်းအောင်းနေသည်။
MB_ereg_replace function ကို MB_ereg_search Processing Php Php Code processing နှင့်ပေါင်းစပ်ထားသော MB_ereg_search စီးရီးလုပ်ဆောင်ချက်များမှတဆင့် MB_ereg_search စီးရီးလုပ်ဆောင်ချက်များကိုမထောက်ခံပါ။
အကယ် . သင်ပိုမိုရှုပ်ထွေးသောပုံမှန်လုပ်ဆောင်နိုင်မှုကိုလိုအပ်ပါက Grouping Support ကိုခေါ်ယူရန်လိုအပ်ပါက Preg_replace_Callback ကို အသုံးပြုရန်အကြံပြုသည်။