2011-12-03 127 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 

此代碼僅適用於沒有太多的嵌套引號中的字符串。此代碼不能用於字符串工作:

「測試‘字符串是‘測試’測試’測試」