PHP生成正则表达式
问题描述:
我有一个名为accentToRegex的函数,它应该将重音和非重音字母替换为正则表达式。唯一的问题是,如果我想将“s”替换为“[sš]”和“š”替换为“[sš]”(同样的东西)。这个函数按字符运行char,并且当我输入“s”时,我最终得到了类似[s [sš]]的东西,但是我想改变它,所以它只返回“[sš]”。PHP生成正则表达式
我在考虑用修改过的值运行两次str_replace,但这似乎效率低下。
所以问题是如何改变从char运行char函数和检查已插入的字符忽略insterted字符。
例子。输入=“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;
}
感谢您的时间和帮助,我很感激;)在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";
}
答
本替换你的函数:
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;
}
参见[strtr函数的效率()](http://www.php.net/manual/en/function.strtr.php)功能 - 评论部分中的一个例子几乎就是你要找的东西。 – SDC 2013-02-26 13:38:18
非常感谢 – Miso 2013-02-26 13:51:21