1

我正在尝试修改 PHP Markdown 以实现Jeff Attwood 建议的 3 项更改中的 2 项,即启用基于返回的换行符并删除对内部单词强调的支持。

我能够很容易地从如何将单个换行符视为 PHP Markdown 中的真正换行符进行第一次学习?,但我发现第二个很难实现。SO上有一个处理它的问题,但是由于我还不太了解正则表达式,所以我不知道如何实现给定的解决方案。

我需要对Michel Fortin 的 PHP Markdown进行哪些修改才能关闭内部单词强调?

4

1 回答 1

0

后来我通过挖掘 PHP Markdown Extra 找到了答案。

protected $em_relist = array(
    ''  => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S|$)(?![\.,:;]\s)',
    '*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
    '_' => '(?<=\S|^)(?<!_)_(?!_)',
    );
protected $strong_relist = array(
    ''   => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S|$)(?![\.,:;]\s)',
    '**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
    '__' => '(?<=\S|^)(?<!_)__(?!_)',
    );
protected $em_strong_relist = array(
    ''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S|$)(?![\.,:;]\s)',
    '***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
    '___' => '(?<=\S|^)(?<!_)___(?!_)',
    );

对此:

protected $em_relist = array(
    ''  => '(?:(?<!\*)\*(?!\*)|(?<![a-zA-Z0-9_])_(?!_))(?=\S|$)(?![\.,:;]\s)',
    '*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
    '_' => '(?<=\S|^)(?<!_)_(?![a-zA-Z0-9_])',
    );
protected $strong_relist = array(
    ''   => '(?:(?<!\*)\*\*(?!\*)|(?<![a-zA-Z0-9_])__(?!_))(?=\S|$)(?![\.,:;]\s)',
    '**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
    '__' => '(?<=\S|^)(?<!_)__(?![a-zA-Z0-9_])',
    );
protected $em_strong_relist = array(
    ''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<![a-zA-Z0-9_])___(?!_))(?=\S|$)(?![\.,:;]\s)',
    '***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
    '___' => '(?<=\S|^)(?<!_)___(?![a-zA-Z0-9_])',
    );

完美地完成了这项工作。

于 2013-04-17T06:21:53.217 回答