我试图用正常替换替换重音字符.以下是我目前正在做的事情.
$string = "Éric Cantona";
$strict = strtolower($string);
echo "After Lower: ".$strict;
$patterns[0] = '/[á|â|à|å|ä]/';
$patterns[1] = '/[ð|é|ê|è|ë]/';
$patterns[2] = '/[í|î|ì|ï]/';
$patterns[3] = '/[ó|ô|ò|ø|õ|ö]/';
$patterns[4] = '/[ú|û|ù|ü]/';
$patterns[5] = '/æ/';
$patterns[6] = '/ç/';
$patterns[7] = '/ß/';
$replacements[0] = 'a';
$replacements[1] = 'e';
$replacements[2] = 'i';
$replacements[3] = 'o';
$replacements[4] = 'u';
$replacements[5] = 'ae';
$replacements[6] = 'c';
$replacements[7] = 'ss';
$strict = preg_replace($patterns, $replacements, $strict);
echo "Final: ".$strict;
Run Code Online (Sandbox Code Playgroud)
这给了我:
After Lower: éric cantona
Final: ric cantona
Run Code Online (Sandbox Code Playgroud)
上面给了我ric cantona我想要的输出 …
用户输入一组带有重音和波浪号的名称:
Renato Núñez, David DeJesús, and Edwin Encarnación
Run Code Online (Sandbox Code Playgroud)
我的数据库为这些人设置了英文名称
@names = ('Renato Nunez','David DeJesus','Edwin Encarnacion');
Run Code Online (Sandbox Code Playgroud)
我希望对这些名称进行正则表达式匹配.
$string = "Renato Núñez, David DeJesús, and Edwin Encarnación";
foreach my $name (@names) {
print "found:$name\n" if ($name =~ /$string/);
}
Run Code Online (Sandbox Code Playgroud)
如目前所示,我没有比赛.
我尝试了这个,但它没有用.
$string = "Renato Núñez, David DeJesús, and Edwin Encarnación";
foreach my $name (@names) {
$name =~ s|a|[áa]|;
$name =~ s|e|[ée]|;
$name =~ s|i|[íi]|;
$name =~ s|o|[óo]|;
$name =~ s|u|[úu]|;
$name =~ s|n|[ñn]|;
# Originally: print "found:$name\n" if ($name =~ /$string/);
# …Run Code Online (Sandbox Code Playgroud)