php - 使用 RegEx 突出显示阿拉伯语文本
问题描述
我的数据库包含带有变音符号/塔什基尔的阿拉伯语文本。要搜索没有变音符号/tashkeel 的用户类型,我可以使用全文搜索语句成功搜索,但无法使用正则表达式突出显示搜索词:
$str="اِنَّ الَّذِیۡنَ اٰمَنُوۡا وَ عَمِلُوا الصّٰلِحٰتِ وَ اَخۡبَتُوۡۤا اِلٰی رَبِّہِمۡ ۙ اُولٰٓئِکَ اَصۡحٰبُ الۡجَنَّۃِ ۚ ہُمۡ فِیۡہَا خٰلِدُوۡنَ";
$ptr="عملوا";
$result = preg_replace("/$ptr/", '<span style="background:yellow">' . $ptr . '</span>', $str);
echo $result;
关于如何解决这个问题的任何想法?
解决方案
您的字符串有额外的字符,如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;
推荐阅读
- c# - .Contains() 仅检查 string[] .NET Core 3.1 的第一个元素
- c++ - Unordered map 有一个错误,指出函数本身在库 C++ 中不存在
- css - CSS 关键帧动画影响 div 的模态窗口
- python - 从 PySpark 字符串列获取 UTC 时间戳
- java - 行在表格中不可见
- sql - 如何在 Oracle SQL 上进行查询以获取时间间隔,按特定字段分组
- python - 如何将列表解析为熊猫数据框中的列
- flutter - 从颤动的日历中获取选定日期的值
- c++ - wxFrame 捕捉非客户区/边框事件?
- java - 如何避免重复请求的竞争条件?