[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
这个需要用到所谓的 "平衡组"
https://learn.microsoft.com/zh-c ... ng_group_definition
  1. $s='xzc abc(s "(abc)"); dfg()';
  2. [regex]::Match($s, 'abc\((?:(?>[^()]*)|\((?<Open>)|\)(?<-Open>))*(?(Open)(?!))\)').Value;
复制代码

TOP

回复 6# 小白龙


      我要是你,我会打开链接,先了解一下什么是"平衡组";
或者搜索一下网络,搞明白那些流派支持 "平衡组",那些不支持。
像你这样,只想着要答案,一百年也学不会。

TOP

本帖最后由 WHY 于 2023-3-13 23:40 编辑
  1. Function Get-BalanceSet([ref]$str){
  2.     $index = $str.Value.IndexOf('abc(');
  3.     if ($index -lt 0){         #不含 'abc(' 子串,退出函数
  4.         return;
  5.     }
  6.     $str.Value = $str.Value.SubString($index);   #删掉 'abc(' 之前的所有字符
  7.     $arr = [Collections.ArrayList]@();
  8.   
  9.     $n = 0;
  10.     $m = 0;
  11.     for ($i=0; $i -lt $str.Value.Length; $i++){  #遍历字符串每个字符
  12.         $s1 = $str.Value.SubString($i, 1);       #截取第i个字符,赋值给$s1
  13.         [void]$arr.Add($s1);                     #再将$s1存放到数组
  14.         if ( $s1 -eq ')' ){                      #右括弧,n减1
  15.             $n--;
  16.         } elseIf ( $s1 -eq '(' ){                #左括弧,n加1
  17.             $n++;
  18.             $m++;
  19.         }
  20.         if ($n -eq 0 -and $m -gt 0){             #若n=0且左括弧数不为0
  21.             [void]$out.Add($arr -join '');       #匹配结果存放到$out
  22.             break;                               #退出For
  23.         }
  24.     }
  25.     $str.Value = $str.Value.SubString(4);        #删除开头的 'abc(' 4个字符
  26.     Get-BalanceSet ([ref]$str.Value);            #递归
  27. }
  28. $s = 'xzc abc(s "(abc)"); dfg(); abc(123(ggg))';
  29. $out = [Collections.ArrayList]@();               #数组,存放结果
  30. Get-BalanceSet ([ref]$s);
  31. $out;
  32. echo 'Done';
  33. [Console]::ReadLine();
复制代码
2

评分人数

TOP

返回列表