Board logo

标题: [问题求助] powershell正则平衡组匹配只取每一个匹配的第1组的值 [打印本页]

作者: 小白龙    时间: 2023-5-20 22:06     标题: 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
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2