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

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

本帖最后由 小白龙 于 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
复制代码

返回列表