2011-12-03 128 views
1

我有一个字符串:“Blah等等等等”等等等等等等,我需要将此字符串上的引号替换为«等等等等»如何替换双引号?

我试图使用此脚本:

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

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

»Some text» Some text Some text 

我怎样才能做到这一点?

+0

你的例子使用“智能”引号,但我假设你使用正则表达式,你实际上会取代直引号? –

+0

我只能用正则表达式。是的,原文使用直引号,它们是相同的。这是一个问题。我需要在文本中将“这些引号”替换为“这些引号”。 (对不起,我的英语不好) –

回答

2

最直接的方法可能是使用lookarounds来检测它的报价是直接前一个字或之后。

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

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

-1

可能是这样的吗?

$m=str_replace("&lt;","",$m); 
$m=str_replace("&rt;","",$m); 
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 

此代码仅适用于没有太多的嵌套引号中的字符串。此代码不能用于字符串工作:

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