如何使用PHP preg_replace匹配一个字符加空格

时间:2015-05-05 09:21:46

标签: php regex

在我的文字中,我有这个输出:

  

Åapat

我想搜索'Å',注意Å+空格。并将其转换为'Š'。

所以基本上我想找到这个字母后跟空格,并用一个字母替换它,没有空格。

字符串替换不能这样做,而且我对正则表达式不是很好,我试过这个但它不起作用:

$return = preg_replace('/[Å\s]/', 'Š', $return);

有人能帮助我吗?

注意:这个单词“Åapat”不一定是在句子的开头,大部分时间它都在中间的某个地方。

3 个答案:

答案 0 :(得分:3)

$re = "/Å\\s/m";
$str = "Å apat";
$subst = "Š";

$result = preg_replace($re, $subst, $str);

这应该适合你。See demo

答案 1 :(得分:1)

您似乎正在尝试使用字符串替换来解决编码问题(可能只是显示问题)。

这不是要走的路!

让我们看看会发生什么:

如果您使用十六进制查看器查看字符串,您将找到此十六进制序列:C5 A0

但是根据上下文,这个序列可以用两种不同的方式解释:

C5 A0 =Š(utf8编码中的C5A0)=Å(unicode中的C5)+ NO-BREAK SPACE(unicode中的A0)

所以似乎问题是你的字符串显示为一系列unicode代码点而不是utf8编码的字符串。

我认为问题来自没有良好编码信息的html页面。尝试在头标记之间添加有关页面编码的信息:

  • html5:<meta charset="UTF-8"/>
  • html4:<meta http-equiv="content-type" content="text/html; charset=UTF-8">

链接:chartable with unicode code point and utf8 encoding

答案 2 :(得分:0)

这可以帮到你:

$result = preg_replace('/Å /', 'Š', $text);

你的正则表达式[Å\s]的作用是:匹配一个字符Å或任何空白字符并用Š

替换它