找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: wxyz0001

[问题求助] [已解决]PowerShell正则表达式匹配第三行到指定字符串之前的所有行

[复制链接]
 楼主| 发表于 2021-5-24 22:27:04 | 显示全部楼层
回复 15# qixiaobin0715


    差不多是这个意思,断言,说成切断要准确些,把group(0)和group(1)从中切断,零宽的部分也就是group(0),为0,就是None,也就丢弃了
发表于 2021-5-24 23:41:42 | 显示全部楼层
回复 16# wxyz0001
group(0)我不知应当叫做什么,姑且起名为全部匹配,应当整个表达式匹配的内容吧。比如说,用([a-z]+)-([0-9]+)-([A-Z]+)匹配good-147-BAD,对应关系应当是:
group(1)——good
group(2)——147
group(3)——BAD
group(0)——good-147-BAD
发表于 2021-5-24 23:56:51 | 显示全部楼层
先行断言、后发断言、零宽断言、环视、预查等等,这些高大上的命名很容易把人搞蒙。
我认为只需要弄明白它的匹配原理,就不需要理会它是啥名字了。
所谓的零宽度断言,无非就是匹配符合条件的位置,而不是匹配字符,所以不会把它放到匹配组里面。

用 (?<=a)b 匹配字符串 ab
就是匹配 b 前面、a 后面的一个位置。
发表于 2021-5-25 06:20:59 | 显示全部楼层
(?<=a)b,是匹配前面是a的b字符,得到匹配的只是b;b前面为a,是得到匹配的前提条件。
发表于 2021-5-25 13:01:32 | 显示全部楼层
本帖最后由 WHY 于 2021-5-27 21:15 编辑

假设字符串为 ab,作为对比:
(?<=a)b
(?<=a) 匹配 b 前面、a 后面的一个位置,这个位置类似于 \b、^、$这种锚点。把锚点存储在匹配组里显然没有意义。
匹配结果:b

(?:a)b
(?:a)匹配字符a,但匹配的字符 a 不会存储在匹配组Group[1]里面。
匹配结果:ab

(a)b
(a)匹配字符a,匹配的字符 a 存储在匹配组Group[1]中。
匹配结果:ab
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 22:42 , Processed in 0.010549 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表