从PHP Markdown中删除对词内强调的支持

时间:2013-04-17 06:11:15

标签: php regex markdown

我正在尝试修改PHP Markdown以实现3 changes Jeff Attwood suggested中的2个,即启用基于返回的换行符并删除对字内重点的支持。

我能够很容易地从How to treat single newline as real line break in PHP Markdown?学习,但我发现第二个很难实现。 SO上有this question处理它,但由于我还没有真正了解正则表达式,我不知道如何实现给定的解决方案。

我需要对Michel Fortin's PHP Markdown进行哪些修改以关闭字内重点?

1 个答案:

答案 0 :(得分: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_])',
    );

完美地完成工作。