首页 > 解决方案 > 使用 RegEx 突出显示阿拉伯语文本

问题描述

我的数据库包含带有变音符号/塔什基尔的阿拉伯语文本。要搜索没有变音符号/tashkeel 的用户类型,我可以使用全文搜索语句成功搜索,但无法使用正则表达式突出显示搜索词:

$str="اِنَّ الَّذِیۡنَ اٰمَنُوۡا وَ عَمِلُوا الصّٰلِحٰتِ وَ اَخۡبَتُوۡۤا اِلٰی رَبِّہِمۡ ۙ اُولٰٓئِکَ اَصۡحٰبُ الۡجَنَّۃِ ۚ ہُمۡ فِیۡہَا خٰلِدُوۡنَ";

$ptr="عملوا";

$result = preg_replace("/$ptr/", '<span style="background:yellow">' . $ptr . '</span>', $str);

echo $result;

关于如何解决这个问题的任何想法?

标签: phpregex

解决方案


您的字符串有额外的字符,如tashkil. 但是您要匹配的字符没有tashkil,因此解决方案是替换额外的字符并使两个字符串相似。

<?php
function stripDiacritics($str) {
    $diacritic = array("ِ" ,"ٰ" ,"ّ" ,"ۡ" ,"ٖ" ,"ٗ" ,"ؘ" ,"ؙ" ,"ؚ" ,"ٍ" ,"َ" ,"ُ", "ٓ" ,"ْ" , "ٌ" , "ٍ",  "ً",  "ّ", "ۤ");
    $str = str_replace($diacritic, '', $str); 
    return $str;       
}

$str="اِنَّ الَّذِیۡنَ اٰمَنُوۡا وَ عَمِلُوا الصّٰلِحٰتِ وَ اَخۡبَتُوۡۤا اِلٰی رَبِّہِمۡ ۙ اُولٰٓئِکَ اَصۡحٰبُ الۡجَنَّۃِ ۚ ہُمۡ فِیۡہَا خٰلِدُوۡنَ";
$words = explode(" ",$str);
$resultText='';
foreach ($words as $word) {
    $strippedWord = stripDiacritics($word);
    $ptr="عملوا";
    if ($strippedWord == $ptr) {
        $resultText .= ' <span style="background:yellow">'.$word.'</span>';
    }            
    else {
        $resultText .= ' '.$word;
    }
}
echo $resultText;

在此处输入图像描述


推荐阅读