【发布时间】:2010-08-01 00:38:17
【问题描述】:
我正在修改PHP Markdown(在 Stack Overflow 上使用的标记语言的 PHP 解析器)试图实现 Jeff 在this blog post 中描述的第 1、2 和 3 点。最后两个我很容易完成,但事实证明这一个非常困难:
- 删除了对单词内的支持 强调like_this_example
事实上,在“正常”的 markdown 实现中,like_this_example 将呈现为 likethisexample。这是非常不可取的;我只希望 _example_ 成为 example。
我查看了源代码,发现用于强调的正则表达式:
var $em_relist = array(
'' => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S|$)(?![.,:;]\s)',
'*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
'_' => '(?<=\S|^)(?<!_)_(?!_)',
);
var $strong_relist = array(
'' => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S|$)(?![.,:;]\s)',
'**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
'__' => '(?<=\S|^)(?<!_)__(?!_)',
);
var $em_strong_relist = array(
'' => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S|$)(?![.,:;]\s)',
'***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
'___' => '(?<=\S|^)(?<!_)___(?!_)',
);
我尝试在Regex Buddy 中打开它,但还不够,在花了半个小时的工作后,我仍然不知道从哪里开始。有什么建议吗?
有些人在遇到 问题,想“我知道,我会用 正则表达式。”现在他们有了 两个问题。
【问题讨论】:
-
这些正则表达式让我感到困惑,所以我不太确定,但我认为您可以使用
\b(单词边界)来检查下划线是否位于单词的开头和结尾。例如,\bfoo\b将匹配 "foo bar" 中的foo,但不会匹配 "foobar" 或 "barfoo"。仅供参考(我很确定你不能按原样使用它)/\b_(.+?)_\b/在我测试过的输入上做得很好。 -
嘿,这不是一个答案,但你们是专家.. 你能帮我解决这个 WMD 的初级问题吗stackoverflow.com/questions/3616788/…