我正在尝试修改 PHP Markdown 以实现Jeff Attwood 建议的 3 项更改中的 2 项,即启用基于返回的换行符并删除对内部单词强调的支持。
我能够很容易地从如何将单个换行符视为 PHP Markdown 中的真正换行符进行第一次学习?,但我发现第二个很难实现。SO上有一个处理它的问题,但是由于我还不太了解正则表达式,所以我不知道如何实现给定的解决方案。
我需要对Michel Fortin 的 PHP Markdown进行哪些修改才能关闭内部单词强调?
我正在尝试修改 PHP Markdown 以实现Jeff Attwood 建议的 3 项更改中的 2 项,即启用基于返回的换行符并删除对内部单词强调的支持。
我能够很容易地从如何将单个换行符视为 PHP Markdown 中的真正换行符进行第一次学习?,但我发现第二个很难实现。SO上有一个处理它的问题,但是由于我还不太了解正则表达式,所以我不知道如何实现给定的解决方案。
我需要对Michel Fortin 的 PHP Markdown进行哪些修改才能关闭内部单词强调?
后来我通过挖掘 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_])',
);
完美地完成了这项工作。