我有一个名为accentToRegex的函数,因此应该将重音和非重音字母替换为正则表达式。唯一的问题是,如果我想将“s”替换为“[sš]”而将“š”替换为“[sš]”(同样的事情)。该函数运行char by char,当我输入“s”时,我最终得到类似[s [sš]]的东西,但是我想改变它,所以它只返回“[sš]”。
我正在考虑使用修改后的值运行str_replace两次,但这似乎效率低下。
所以问题是如何通过char更改函数来运行char并检查已经插入的字符以忽略所插入的字符。
实施例。 input =“s” - >变成“[sš]” - >将“š”改为“[sš]”,所以我们得到[s [sš]而不是“[sš]”。
function accentToRegex($pattern)
{
$replacements = Array("a" => "[aáàäâ]",
"e" => "[eéèëê]",
"s" => "[sš]",
"š" => "[sš]",
....
);
$flags = "iu";
$times = 0;
$final = str_replace( array_keys($replacements), $replacements, $pattern);
$regex = "/$final/$flags";
return $regex;
}
感谢您的时间和帮助,我很感激;)
答案 0 :(得分:0)
在strtr()函数注释中找到的答案,该函数名为gr_regexp(..)。
function accentToRegex($mystring){
$replacement=array(
array("a","á","ä"),
array("s", "š"),
);
foreach($replacement as $group){
foreach($group as $character){
$exp="[";
foreach($group as $expcharacter){
$exp.=$expcharacter;
}
$exp.="]";
$trans[$character]=$exp;
}
}
$temp=explode(" ", $mystring);
for ($i=0;$i<sizeof($temp);$i++){
$temp[$i]=strtr($temp[$i],$trans);
$temp[$i]=addslashes($temp[$i]);
}
$flags = "iu";
return "/".implode(".*",$temp)."/$flags";
}
答案 1 :(得分:0)
用以下功能替换您的功能:
function accentToRegex($pattern)
{
$replacements = Array("a" => "[aáàäâ]",
"e" => "[eéèëê]",
"s" => "[sš]",
"š" => "[sš]",
);
$flags = "iu";
$times = 0;
$final = strtr($pattern, $replacements);
$regex = "/$final/$flags";
return $regex;
}