PHP Preg_replace与法语标点/重音符不匹配

时间:2019-03-15 09:30:22

标签: php regex

我不明白为什么此正则表达式不能与法语重音/标点符号一起使用。

 <?PHP
$search=array( '/\bfr\b/', '/\bs.a./', '/\bs.a.r.l./');
$replace=array('');
$nom="fr caissefr federale de credit s.A. mutuel 4 rue frédéric-guillaume raiffeisen 67000 frstrasbourg fr ";
$nom=strtolower($nom);
$nom=preg_replace($search, $replace, $nom);
echo $nom;
?>

此正则表达式返回 “信贷互助会4大街édéric-guillaumeraiffeisen 67000 frstrasbourg”

我想删除所有单独的“ fr”(或所有我可以列出为“ sarl”的首字母缩写),但是正则表达式也删除了“FRÉDÉRIC”中的fr,但没有删除“ frstrasbourg”中的fr和我不明白为什么?

有什么想法吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

有两个问题:

  • 使用u修饰符使\b完全了解Unicode
  • 转义所有属于文字点的点

PHP demo

$search=array( '/\bfr\b/u', '/\bs\.a\./u', '/\bs\.a\.r\.l\./u');
$replace=array('');
$nom="fr caissefr federale de credit s.A. mutuel 4 rue frédéric-guillaume raiffeisen 67000 frstrasbourg fr ";
$nom=strtolower($nom);
$nom=preg_replace($search, $replace, $nom);
echo $nom;
// => caissefr federale de credit  mutuel 4 rue frédéric-guillaume raiffeisen 67000 frstrasbourg  

请注意,您可以在代码中使用正则表达式online进行调试之前对其进行测试。例如。没有u修饰符matches Frederic的版本,而有u does not的版本。这是PHP available modifiers的列表。