所以我是一个排版纳粹(它们就像类固醇上的语法纳粹),并且我有一个字符串,其中可能包含多个级别的双引号,例如:
$str = 'Outer text "first level "second level "third level" second level" first level" outer text';
在我的母语中,最多三个级别的引用在印刷上是正确的,每个级别都有自己的引号。我想将所有双引号对替换为其对应的实体,例如:
- 第一级:“文本”(
„
和”
) - 第二级:»text«(
»
和«
) - 第三级:'文本'(
’
) - 任何附加级别:'text' (
’
)
所以上面的文本将输出为:
外部文本“第一级”第二级“第三级”第二级«第一级”外部文本
此外,字符串中可能存在兄弟""
对:
$str = 'Quote from my book: "She didn\'t feel "depressed", "tired" or "sad"."';
所以这将输出为:
引用我书中的一句话:“她没有感到“沮丧”、“疲倦”或“悲伤”。”
(这可能很棘手,但我们知道 a"
之后或之前总是有空格或标点符号
,
, .
, ;
, ?
, !
)
最后,$str
也可能包含 HTML,其中属性的引号不应更改:
$str = '<p class="quote">The error said: <span class="error_msg">"Please restart your "fancy" computer!"</span></p>';
我听说使用递归正则表达式可能是一种解决方案,但我正在寻找一种更有效的方法,因为字符串可能是长 HTML 文本。
更新:似乎我跳过了 CSS 的quotes
属性和<q>
元素。这使得内联引号更加优雅。