如何替换双引号?

时间:2011-12-03 08:42:40

标签: php preg-replace

我有一个字符串:“Blah blah blah”blah“blah blah”,我需要将此字符串上的引号替换为“Blah blah blah”blah»blah blah»

我试图使用这个脚本:

$m=preg_replace('/([^\s>])\\\"/s',"$1»",$m);
$m=preg_replace('/\\\"([^\s])/s',"«$1",$m);

但是当从空间开始的字符串时,我有类似的东西:

 »Some text» Some text Some text

我该怎么做?

3 个答案:

答案 0 :(得分:2)

最直接的方法可能是使用外观来检测引用是直接在单词之前还是直接在单词之后。

$m = preg_replace('/"(?=\w)/', '«', $m);
$m = preg_replace('/(?<=\w)"/', '»', $m);

这对你的例子很有用,但可能过于简单了。你可能想要更进一步,寻找一个单词字符或标点,所以“等等等等。”也会匹配。这将使第二个例子像这样:/(?<=[\w,.?!\)])"/

答案 1 :(得分:0)

$str = '"Test string "blabla" sdf "dd" dffdsf"';
$result = preg_replace('/(\s)"([^"]+)"(\s)/', '$1«$2»$3', $str);
$result = preg_replace('/^"(.*?)"$/', '«$1»', $result); // replace first and last quotes

此代码仅适用于没有多个嵌套引号的字符串。此代码不适用于字符串:

  

“测试”字符串是“测试”测试“测试”

答案 2 :(得分:-1)

可能是这样的吗?

$m=str_replace("&lt;","",$m); 
$m=str_replace("&rt;","",$m);