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

[问题求助] powershell正则平衡组匹配只取每一个匹配的第1组的值

[复制链接]
发表于 2023-5-20 22:06:48 | 显示全部楼层 |阅读模式
本帖最后由 小白龙 于 2023-5-21 08:41 编辑

我想利用powershell正则平衡组取下面红色字部分
现在正则存在两个问题
1. 只能匹配前两个, 而且会输出整个匹配, 我想只输出类名, 即: class后面的 文本
2. 最下面那个无法匹配到, 因为 class 后面 接着的文本后面, 不是直接出现的 {  怎样修改正则, 也适应这种情况?
求精通正则大佬指导, 谢谢

我需要的脚本执行后的结果:
Azzz
Bxx
Cwww


-------------------------------------------
using System;

class Azzz
{
        //A
}

public class Bxx {
        //B
}

internal class Cwww : Form
{
        //C
}
  1. $s = @'
  2. using System;

  3. class Azzz
  4. {
  5.         //A
  6. }

  7. public class Bxx {
  8.         //B
  9. }

  10. internal class Cwww : Form
  11. {
  12.         //C
  13. }
  14. '@

  15. $regex = '.* ([a-zA-Z0-9_]+)\s*\{(?:[^{}]+|\{(?<DEPTH>)|\}(?<-DEPTH>))*?(?(DEPTH)(?!))\}'

  16. #[regex]::Matches($s, $regex).value #完全匹配

  17. #_1_ 怎样只输出每个匹配的类名
  18. [regex]::Matches($s, $regex).groups.value

  19. #_2_ 最后那个匹配,怎样输出 Cwww
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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