是否有正则表达式匹配具有和不具有特殊字符的特定字符串?特殊字符不敏感,可以这么说。
与sql数据库关键字=الحمد匹配后搜索突出显示=الحمد
编辑:我想匹配具有和不带特殊/重音字符的特定字符串。不只是任何字符串/字符。
function mbStringToArray($string)
{
$strlen = mb_strlen($string);
while($strlen)
{
$array[] = mb_substr($string, 0, 1, "UTF-8");
$string = mb_substr($string, 1, $strlen, "UTF-8");
$strlen = mb_strlen($string);
}
return $array;
}
// I had to use this ugly function to remove accents as iconv didn't work properly on my test server.
function stripAccents($stripAccents){
return utf8_encode(strtr(utf8_decode($stripAccents),utf8_decode('ِ', 'ُ', 'ٓ', 'ٰ', 'ْ', 'ٌ', 'ٍ', 'ً', 'ّ', 'َ'),''));
}
$keywords= 'الحمد';
$search = '%' . $keywords . '%';
$stmt = $mysqli->prepare("SELECT * FROM quran WHERE $trans LIKE ?");
$stmt->bind_param('s', $search);
$stmt->execute();
$stmt->store_result();
$clientNameNoAccent = stripAccents($clientName);
$clientNameArray = mbStringToArray($clientName);
foreach($clientNameArray as $pos => &$char)
{
$charNA =$clientNameNoAccent[$pos];
if($char != $charNA)
{
$char = "(?:$char|$charNA|$charNA\p{M})";
}
}
$clientSearchPattern = implode($clientNameArray); // c(?:é|e|e\p{M})ra
if($stmt->execute()){
$result = $stmt->get_result();
while($row = $result->fetch_assoc()){
$text = 'الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ';
$search = preg_replace('/(.*?)(' . $clientSearchPattern . ')(.*?)/iu', '$1<span class="highlight">$2</span>$3', $text);
echo $search;// لِلَّهِ رَبِّ الْعَالَمِينَ<span class="highlight">الْحَمْدُ</span>
}
}