2013-04-17 10 views
1

我试图修改PHP Markdown来执行2中的3 changes Jeff Attwood suggested,即启用基于回车的换行符并删除对词内重点的支持。取消对PHP内部词强调的支持Markdown

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

需要对Michel Fortin's PHP Markdown进行哪些修改才能关闭内部词的重点?

回答

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_])', 
    ); 

做这项工作完美。