我有很多段落的长文本。我需要搜索所有文本被引号括起来的实例,所以“......”,并将其替换为& ldquo; ...& rdquo;。
我还想检测报价是否缺少结束报价而不是明显转换。
这是我现在能想到的最好的:
$text = preg_replace('/(?<=\s)"(.+?)"(?=\s)/', '“\1”', $text);
但不确定是否会涵盖所有情况。任何其他建议将不胜感激。
答案 0 :(得分:1)
我没有看到任何客观标准来选择双引号是开头还是结束报价,除非在开头报价之前或在“正常”文本中的结束报价之后没有单词字符。
您可以尝试这样做:
$text = preg_replace('/\B"([^"]*)"\B/u', '“$1”', $text);
if (strrpos($text, '"') !== false)
$text = rtrim(str_replace('"', '“', $text)) . '”';