だから私はタイポグラフィナチです(彼らはステロイドの文法ナチのようなものです)、次のような複数レベルの二重引用符を含む可能性のある文字列を持っています:
$str = 'Outer text "first level "second level "third level" second level" first level" outer text';
私の母国語では、最大 3 つのレベルの引用がタイポグラフィ上正しく、各レベルには独自の引用符があります。次のように、すべての二重引用符のペアを対応するエンティティに置き換えたいと思います。
- 第 1 レベル: 「テキスト」 (
„
および”
) - 第 2 レベル: »テキスト« (
»
および«
) - 第 3 レベル: 'テキスト' (
’
) - 追加のレベル: 'text' (
’
)
したがって、上記のテキストは次のように出力されます。
外側のテキスト「第 1 レベル」「第 2 レベル」「第 3 レベル」「第 2 レベル」「第 1 レベル」の外側のテキスト
""
また、文字列に兄弟ペアが存在する可能性もあります。
$str = 'Quote from my book: "She didn\'t feel "depressed", "tired" or "sad"."';
したがって、これは次のように出力されます。
私の本からの引用: 「彼女は「落ち込んだ」、「疲れた」、または「悲しい」とは感じませんでした。
(これは難しいかもしれませんが、常にスペース、句読点、、、、が"
続くか先行することがわかっています),
.
;
?
!
最後に、$str
属性の引用符を変更してはならない HTML も含めることができます。
$str = '<p class="quote">The error said: <span class="error_msg">"Please restart your "fancy" computer!"</span></p>';
再帰的な正規表現を使用することが可能な解決策になると聞いたことがありますが、文字列が長い HTML テキストである可能性があるため、より効率的な方法を探しています。
更新:quotes
CSS のプロパティと<q>
要素をすり抜けたようですこれにより、インラインの引用がよりエレガントになります。