gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:51:51 25 4
gpt4 key购买 nike

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

searchengine=http://www.google.com/search?q=$1
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*(;.*)?可以匹配空行,不需要;

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

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

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

关于javascript - 这两个正则表达式有什么区别? (理解?量词),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39042224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com