PHP生成正则表达式

时间:2013-02-26 13:25:56

标签: php regex

我有一个名为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;
    }

感谢您的时间和帮助,我很感激;)

2 个答案:

答案 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;
}
相关问题