链接
链接包含链接文本(可见文本),目标链接(作为目标链接的 URI),以及可选的链接标题。Markdown 中有两种基本类型的链接。 在内联链接中,目标和标题在链接文本后立即给出。在引用链接中,目标和标题在文档的其他地方定义。
 链接文本是一个由方括号([和])括起的零个或多个内联元素序列组成的。它适用于以下规则:
- 在任意的层嵌套中,链接不能包含其他链接。如果多个其他有效链接定义显示为彼此嵌套,则使用最内层的定义。
- 仅当(a)它们是反斜杠转义或(b)它们显示为匹配的括号对,具有开括号[,一系列零或多个内联和一个闭括号]时,才允许在链接文本中使用括号。
- 行内代码,自动链接和原始HTML 标签比链接文本中的括号绑定地更紧密。 因此,例如,[foo`]`不能是链接文本,因为第二个]是行内代码的一部分。
- 链接文本中的括号比强调标记更紧密,因此,例如,*[foo*](url)是一个链接。
目标链接由以下两者组成
- 打开的<和闭合的>之间的零个或多个字符序列,不包含空格,换行符或未转义的<或>字符,或者
- 不包含 ASCII 空格或管理的(control)字符的非空字符序列,仅当(a)它们是反斜杠转义或(b)它们是左右括号数量相等的非转义括号对的一部分时。(具体实现中可能会对括号嵌套施加限制以避免性能问题,但至少应支持三层嵌套。)
一个链接标题由以下部分构成
- 直接的双引号字符(")之间的零个或多个字符序列,包括反斜杠转义的"字符,或者
- 直接的单引号字符(')之间的零个或多个字符序列,包括反斜杠转义的'字符,或者
- 匹配括号((...))之间的零个或多个字符序列,仅当反斜杠转义时才包含(或)字符。
虽然链接标题可能跨越多行,但它们不能包含空行。
 内联链接包含一个链接文本,后面紧跟左括号(,可选的空格,可选的目标链接,可选的链接标题,通过空格与链接目标分隔,可选的空格和右括号)。链接的文本由链接文本中包含的内联元素组成(不包括方括号)。链接的 URI 由链接目标组成,不包括封闭的<...>(如果存在),反斜杠转义符有效,如上所述。
下面是一个简单的内联链接:
 
示例 493
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
标题可以被省略:
 
示例 494
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
目标链接地址与标题都可以被省略:
 
示例 495
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 496
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
如果目标括在尖括号中,则目标只能包含空格:
示例 497
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 498
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
即使用尖括号括起来,目标也不能包含换行符:
 
示例 499
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 500
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
目标可以包含 ),如果它包含在尖括号中:
 
示例 501
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
包含链接的尖括号必须未转义:
 
示例 502
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
这些不是链接,因为起始的尖括号不匹配:
 
示例 503
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
目标链接中的括号可能会被转义:
 
示例 504
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
只要左后括号数量相等的,允许任意数量的括号不被转义:
 
示例 505
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
如果左右括号数量不相等,你需要转义或者使用尖括号:
 
示例 506
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 507
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
与 Markdown 一样,括号和其他符号也可以转义:
 
示例 508
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
链接可以包含片段标识符和查询参数:
 
示例 509
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
请注意,在不可转义字符之前的反斜杠不发挥转义作用:
 
示例 510
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
URL 转义应该留在目标链接中,因为所有 URL 转义字符也是有效的 URL 字符。目标中的实体和数字字符引用将被解析为相应的 Unicode 代码点。 当以 HTML 格式编写时,这些可以选择性地进行 URL 转义,但是此规范不强制以 HTML 或其他格式渲染 URL。 渲染器可能会对如何在输出中转义或规范化 URL 做出不同的决定。
 
示例 511
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
注意,因为标题通常可以解析为目标链接,如果尝试省略目标链接并保留标题,将获得意外的结果:
 
示例 512
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
标题可以是单引号,双引号或括号:
 
示例 513
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
可以在标题中使用反斜杠转义和实体和数字字符引用:
 
示例 514
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
必须使用空格将标题与链接分开。 其他 Unicode 空格如换行空格不起作用。
 
示例 515
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
如果没有转义字符,则不允许使用嵌套左右数量相等的引号:
 
示例 516
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
可以通过不同类型的引号来解决这个问题:
 
示例 517
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
(注:Markdown.pl确实允许在双引号中使用双引号,其测试套件包括一个证明这一点的测试。但很难看出这带来的额外复杂性的合理理由,因为已经有很多方法——反斜杠转义,实体和数字字符引用,或为封闭的标题——写出包含双引号的标题使用不同类型的引号。Markdown.pl对于标题的处理还有许多其他奇怪的功能。例如,它允许在内联链接中使用单引号标题,但不是引用链接。并且,在引用链接中而非内联链接,它允许标题以"开始并以)结束。Markdown.pl 1.0.1 甚至允许标题没有右引号,但 1.0.2b8 没有。似乎最好采用一个简单,合理的规则,使其在内联链接和链接引用定义中的工作方式相同。)
目标链接和标题周围允许有空格:
 
示例 518
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
但是链接文本和紧跟的括号之间不允许:
 
示例 519
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
链接文本可能包含相等数量的左右括号,但不能包含不平衡的括号,除非它们被转义:
 
示例 520
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 521
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 522
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 523
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
链接文本可能包含内联内容:
 
示例 524
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 525
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
但是,链接在任何嵌套中都不能包含其他链接。
 
示例 526
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 527
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 528
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
这些示例说明了链接文本分组优先于强调分组:
 
示例 529
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 530
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
注意不属于链接的括号_没有_优先级:
 
示例 531
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
这些案例说明了 HTML 标签,行内代码和自动链接优先于链接分组:
 
示例 532
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 533
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 534
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
有三种引用链接:完整的,紧凑的和快捷的。
 完整引用链接包含一个链接文本,后面紧跟一个链接标签,该链接标签与文档中其他位置的链接引用定义相匹配。
 链接标签以左括号([)开头,以第一个不反斜杠转义的右括号(]结尾。在这些括号之间必须至少有一个非空字符。链接标签的开始和结束方括号内不允许使用未转义的方括号字符。链接标签在方括号内最多可包含 999 个字符。
一个标签与另一个标签相匹配,以防它们的标准化形式相等。要标准化标签,要移除打开的和闭合的括号,执行 Unicode 大小写折叠,剥离前导和尾随空格,并将连续的内部空格折叠到单个空格。如果存在多个匹配的引用链接定义,则使用文档中第一个引用的引用链接定义。(在这种情况下,最好发出警告。)
第一个链接标签的内容被解析为内联元素,来作为链接的文本。链接的 URI 和标题由匹配的链接引用定义提供。
这里有一个简单的例子:
 
示例 535
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
链接文本的规则与内联链接的规则相同。从而:
链接文本可能包含相等数量的左右括号,但不包含不平衡括号,除非它们被转义:
 
示例 536
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 537
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
链接文本可能包含内联内容:
 
示例 538
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 539
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
但是,任意层嵌套的链接不能包含其他链接。
 
示例 540
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 541
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
(在上面的示例中,我们有两个快捷引用链接,而不是一个完整的引用链接。)
以下案例说明了链接文本分组优先于强调分组:
 
示例 542
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 543
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
这些案例说明了 HTML 标签,行内代码和自动链接优先于链接分组:
 
示例 544
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 545
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 546
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
匹配不区分大小写:
 
示例 547
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
使用 Unicode 方式折叠:
 
示例 548
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
为确定匹配,连续的内部空格被视为一个空格:
 
示例 549
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 550
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 551
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
这与 John Gruber 的原始 Markdown 语法描述不同,后者明确允许链接文本和链接标签之间的空白。它带来了与内联链接一致的引用链接,它们(根据原始 Markdown 和本规范)在链接文本之后不能有空格。更重要的是,它可以防止无意中捕获连续的快捷引用链接。 如果链接文本和链接标签之间允许有空格,那么在下面我们将有一个引用链接,而不是两个快捷引用链接,如下所示:
[foo]
[bar]
[foo]: /url1
[bar]: /url2
(请注意,快捷引用链接是由 Gruber 自己在Markdown.pl的测试版中引入的,但从未包含在官方语法描述中。如果没有快捷引用链接,在链接文本和链接标签之间允许空格无关紧要;但引入了快捷引用链接,允许这样做太危险了,因为它经常导致意想不到的结果。)
当存在多个匹配的链接参考定义时,使用第一个链接:
 
示例 552
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
请注意,匹配是在标准化字符串上执行的,而不是解析内联内容。因此,即使标签定义了等效的内联内容,以下内容也不匹配:
 
示例 553
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
链接标签不能包含括号,除非它们被反斜杠转义:
 
示例 554
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 555
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 556
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 557
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
请注意,在此示例中]不是反斜杠转义:
 
示例 558
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 559
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 560
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
紧凑引用链接由链接标签组成,该链接标签与文档中其他位置的链接参考定义 匹配,后跟字符串[]。 第一个链接标签的内容被解析为内联,用作链接的文本。 链接的 URI 和标题由匹配的引用链接定义提供。 因此,[foo][]相当于[foo][foo]。
 
示例 561
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 562
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
链接标签不区分大小写:
 
示例 563
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
与完整引用链接一样,两组括号之间不允许有空格:
 
示例 564
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
快捷引用链接由链接标签组成,并且与文档中其他位置的链接参考定义 匹配,后面没有 [] 或链接标签。 第一个链接标签的内容被解析为内联,用作链接的文本。 链接的 URI 和标题由匹配的链接引用定义提供。因此, [foo] 相当于[foo][]。
 
示例 565
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 566
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 567
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 568
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
链接标签不区分大小写:
 
示例 569
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
应保留链接文本后的空格:
 
示例 570
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
如果你只想要括号内的文本,可以反斜杠转义开始括号以避免链接:
 
示例 571
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
请注意,这是一个链接,因为链接标签以第一个后面的右括号结束:
 
示例 572
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
完整和紧凑引用优先于快捷引用:
 
示例 573
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 574
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
内联链接也优先:
 
示例 575
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
示例 576
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
在下面的例子中,[bar][baz]被解析为引用链接,[foo]作为普通文本:
 
示例 577
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
但是在这里,[foo][bar]被解析为引用链接,因为[bar]被定义了:
 
示例 578
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  | 
这里[foo]没有被解析为快捷引用,因为它后跟一个链接标签(即使没有定义[bar]):
 
示例 579
| Markdown | HTML | 效果 | 
|---|---|---|
|  |  |