Regex 构建降价解析器。是否可以检测链接而不检测其中的下划线?
我正在尝试编写一个基本的标记解析器,我想构建一个能够检测链接和强调的正则表达式 在标记中,链接看起来像Regex 构建降价解析器。是否可以检测链接而不检测其中的下划线?,regex,Regex,我正在尝试编写一个基本的标记解析器,我想构建一个能够检测链接和强调的正则表达式 在标记中,链接看起来像[text](URL),而强调/斜体看起来像*text*或\u text 我检测强调没有问题,检测链接也没有问题,但是当链接中有下划线时,例如http://example.com/link_to_article,我的解析器检测到\u到试图强调 我该怎么阻止这一切 我的第一次尝试是确保在第一个下划线之前或第二个下划线之后没有字符,但是内联强调是完全有效的,正如在Stackoverflow上看到的,
[text](URL)
,而强调/斜体看起来像*text*
或\u text
我检测强调没有问题,检测链接也没有问题,但是当链接中有下划线时,例如http://example.com/link_to_article
,我的解析器检测到\u到
试图强调
我该怎么阻止这一切
我的第一次尝试是确保在第一个下划线之前或第二个下划线之后没有字符,但是内联强调是完全有效的,正如在Stackoverflow上看到的,因此像intere_stin_g
这样的例子是完全有效的,这一想法是完全正确的
那么我该如何做到这一点呢?主要有三种方法
(?<!\(\s*\S+)_([^_]+)_(?!\S+(?:\s+"[^"]")\s*\))
堆栈溢出就是这样做的[^\u]
放在了一些地方,但这些地方并不准确;更准确的是(?:(?;即一系列转义的\u
或非\u
字符。或者,您可以大致执行类似.*(?;即从\u
匹配到下一个未转义的\u
另外,如果你想了解更多关于regex的信息,有很多方便的工具可以帮助你,比如和,除非你提出一些规则来区分链接到文章
(非强调)和插入
(强调)这是无法避免的。只需先检测链接,不要在已经分类为URL的文本中查找强调。带星号的内联强调是有效的,但我认为堆栈溢出使用了一种标记的变体,它不能识别带下划线的单词间强调。@DougSmith:我在看原始文章,你使用了ast正如我的评论所说,星号确实有词间强调,但在Stack Overflow的Markdown变体中,下划线没有。
\b_[^_]+_\b