0

我正在尝试将愚蠢的引号换成他们的智能等价物。所以我想Jane said 'How do we do this?' 'I don't know' replied Sam.变成Jane said ‘How do we do this?’ ‘I don’t know’ replied Sam.例如。

中的撇号don't很容易。preq_replace带有模式的/(\w+)'(\w+)/将在单词中找到撇号。但我无法正确交换语音引号。目前我有:

$singlequotesPattern = "/'(.*)'/";
$singlequotesReplacement = "‘$1’";

$singlequotes = preg_replace($singlequotesPattern, $singlequotesReplacement, $text);

但这对上面的句子失败并产生Jane said ‘How do we do this?' 'I don't know’ replied Sam.它只匹配最外面的单引号。我怎样才能让它替换两对引号?

4

1 回答 1

1
$singlequotesPattern = "/'(.*?)'/";

添加 a?以使*量词非贪婪。贪心量词找到可能的最长匹配。一个不贪婪的人会找到最短的。

贪婪的:

Jane said 'How do we do this?' 'I don’t know' replied Sam.
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

非贪婪:

Jane said 'How do we do this?' 'I don’t know' replied Sam.
           ^^^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^
于 2013-06-16T16:14:36.690 回答