这两个正则表达式有什么区别? (理解?量词)

What's the difference between this two regular expressions? (Understanding ? Quantifier)

在书本 Eloquent JavaScript chapter 9: Regular Expressions 下“解析 INI 文件”有一个示例,其中包含一个我根本听不懂的正则表达式。作者正在尝试解析下一个内容:

searchengine=http://www.google.com/search?q=
spitefulness=9.7

; comments are preceded by a semicolon...
; each section concerns an individual enemy
[larry]
fullname=Larry Doe
type=kindergarten bully
website=http://www.geocities.com/CapeCanaveral/11451

[gargamel]
fullname=Gargamel
type=evil sorcerer
outputdir=/home/marijn/enemies/gargamel

关于此格式的规则规定

Blank lines and lines starting with semicolons are ignored.

解析此内容的代码遍历文件中的每一行。为了处理评论,他包含了这个表达式

^\s*(;.*)?

据我了解,此表达式处理行可能以

序列开始

white space characters, including space, tab, form feed, line feed and other Unicode spaces

(source) 直到出现一个分号 ; 然后是 " 除行终止符之外的任何单个字符的序列:\n , \r, \u2028 或 \u2029.”。所有这些仅限于 {0,1} 次出现。

我不明白量词 ? 的要点。我找不到 (regex101) 任何不限制匹配字符串出现的情况。为什么这个表达式与另一个不同:

^\s*(;.*)

提前致谢。

^\s*(;.*)需要;,不能匹配空行。

^\s*(;.*)?可以匹配空行,不需要;

共同部分是 ^\s* - 行(或字符串)的开头,然后是零个或多个空格。

然后 1) (;.*) 匹配 ;(必须有 1 个实例),然后是除换行符以外的零个或多个字符,以及 2) (;.*)? 匹配可选的 sequence(...)? 是一个可选组,因为 ? 是一个量词,匹配 一次或零次出现的量化原子 ,而 atom 可以是一个符号,一个字符 class,一个 group) of a ; 后跟 0+ 个字符一个换行符。

此外,请注意 \s 匹配 LF 和 CR 符号,这意味着(如果 MULTILINE 修饰符打开并且输入是包含多行的文本)正则表达式 ^\s* 可能匹配跨越多行直到第一个非空白字符。

您修改后的最终正则表达式需要一个分号。原始正则表达式将匹配只有空格的行。

由于意图(如果我理解正确的话)是忽略与此正则表达式匹配的行(表面上是注释行),因此也忽略空行是有意义的。