[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
把上次的改一下
  1. $s -match '(?<a>\n\s*)(private|public|static|async|(?<b>(\b\S+|\([^()]+\))\s*))*(?<c>class\s+cs\s*(\([^)]*\))*\s*\{(?:[^{}]+|\{(?<DEPTH>)|\}(?<-DEPTH>))*?(?(DEPTH)(?!))\})'
  2. $regex='(?<a>\n\s*)(private|public|static|async|(?<b>(\b\S+|\([^()]+\))\s*))*(?<c>(abc|cd)\s*\([^)]*\)\s*\{(?:[^{}]+|\{(?<DEPTH>)|\}(?<-DEPTH>))*?(?(DEPTH)(?!))\})'
  3. [regex]::Matches($matches.0, $regex)
复制代码

TOP

回复 11# 小白龙

$matches.0是cs
这堆可以判断有没有abcd
  1. [regex]::Matches($matches.0, $regex)|%{$_.groups[3].value}
复制代码

TOP

回复 12# 小白龙


    改成这样试试
  1. (?<a>\n\s*)(private|public|static|async|(?<b>(\b\S+|\([^()]+\))\s*))*(?<c>class\s+cs\s*(\([^)]*\))*\s*\{(?:([^{}]+|//[^{}]+\{)|\s+\{\s+(?<DEPTH>)|\s+\}\s+(?<-DEPTH>))*?(?(DEPTH)(?!))\})
复制代码

TOP

本帖最后由 idwma 于 2023-5-22 19:27 编辑

可能会有多行注释和引号里不成对括号的情况再改一下
  1. (?<a>\n\s*)(private|public|static|async|(?<b>(\b\S+|\([^()]+\))\s*))*(?<c>class\s+cs\s*(\([^)]*\))*\s*\{(?>[^{}\/\x22\x27]+|\/\/[^\n]+|/\*(\n|.)*?\*/|[\x22\x27](\n|.)*?[\x22\x27]|[^{}]|\{(?<DEPTH>)|\}(?<-DEPTH>))*?(?(DEPTH)(?!))\})
复制代码

TOP

再改一下10楼的用命名组合并到一条正则里,不用过两次了
  1. $r='(?<a>\n\s*)(private|public|static|async|(?<b>(\b\S+|\([^()]+\))\s*))*(?<c>class\s+cs\s*(\([^)]*\))*\s*\{(?>[^{}\/\x22\x27]+(?<d>cd|abc)(\s*\([^)]*\))*|[^{}\/\x22\x27]+|\/\/[^\n]+|/\*(\n|.)*?\*/|[\x22\x27](\n|.)*?[\x22\x27]|[^{}]|\{(?<DEPTH>)|\}(?<-DEPTH>))*?(?(DEPTH)(?!))\})'
  2. [regex]::Matches($s, $r).groups|?{$_.name -eq 'd'}|%{$_.captures.value}
复制代码
1

评分人数

TOP

返回列表