请教正则表达式pr\s+stats\s+(\d+)(?:hours|hrs)的含义,重点解析\s与\d
正则表达式
pr\s+stats\s+(\d+)(?:hours|hrs) 详细解析 没问题!我来帮你一步步拆解这个正则表达式,尤其是你困惑的\s和\d部分,先给你一个整体结论:这个正则是用来匹配类似 pr stats 24hours、pr stats 12hrs 这类字符串,核心目的是提取出pr stats后面跟着的小时数字(不管单位是全拼hours还是缩写hrs)。
下面逐个模块拆解:
1. pr
就是字面匹配小写的字符p和r,必须连续出现(默认大小写敏感,所以不会匹配PR或Pr)。
2. \s+
这是你提到的第一个元字符,我给你拆细讲:
\s:是空白字符元字符,它能匹配任何空白类字符,包括普通空格、制表符(Tab)、换行符、回车符这些。+:是量词,代表“匹配前面的元素1次或多次”。- 合起来
\s+的意思就是:匹配一个或多个连续的空白字符——不管是单个空格、三个空格,还是Tab加空格的组合,都能被它精准匹配。
3. stats
和前面的pr一样,字面匹配小写的s、t、a、t、s这五个连续字符,必须完全对应才会匹配。
4. \s+
和第2部分完全一致,用来匹配stats后面的一个或多个空白字符,允许stats和数字之间有任意数量的空白间隔。
5. (\d+)
这是你困惑的第二个元字符,也是这个正则的核心提取部分:
\d:是数字元字符,等价于[0-9],专门匹配0到9之间的任意单个数字。+:同样是量词,代表匹配前面的元素1次或多次,所以\d+就是匹配一个或多个连续的数字(比如5、123、9999都能被匹配)。- 外面的
():是捕获组,作用是把这部分匹配到的内容单独提取出来——比如匹配pr stats 24hours时,你可以直接从捕获组里拿到24这个数字值。
6. (?:hours|hrs)
这是一个非捕获组(开头的?:标记了它的身份),意思是它只负责匹配内容,但不会把匹配到的单位(hours或hrs)单独提取出来:
|:是“或”运算符,所以hours|hrs就是匹配全拼的hours,或者缩写的hrs,两种写法都能被识别。
举几个实际匹配的例子
匹配成功的场景:
pr stats 8hours→ 捕获组提取到8pr stats 16hrs→ 多个空格被\s+匹配,捕获组提取到16pr stats 24hours→ 用Tab分隔也能匹配,捕获组提取到24
匹配失败的场景:
PR stats 5hours→ 开头是大写PR,不匹配小写的prpr stat 3hrs→ 是stat不是stats,字符不匹配pr stats twohours→ 数字部分是英文单词two,不匹配\d+
内容的提问来源于stack exchange,提问作者nirav bhanushali
相关产品推荐
相关产品推荐

