You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell提取pom.xml中不在parent等标签内的artifactId

PowerShell提取pom.xml根层级artifactId实现方案

问题背景

需要通过PowerShell正则匹配pom.xml配置文件,仅提取项目根层级的<artifactId>节点值,忽略<parent>、<build>、<dependencies>三个标签内部嵌套的所有artifactId内容。
此前使用的命令会返回所有位置的artifactId,包含父POM、构建插件、依赖项内的节点,无法满足过滤需求,原命令如下:

Get-Content pom.xml -Raw | % { [regex]::matches($_ , '<artifactId>([\s\S]*?)</artifactId>')} |% {$_.Groups[1].Value}

可用实现命令

直接在pom.xml所在目录执行以下命令即可:

$pomRaw = Get-Content pom.xml -Raw
# 正则排除parent/build/dependencies标签块内的artifactId匹配
$matchPattern = '(?s)(?<!<(parent|build|dependencies)>[\s\S]*?)<artifactId>(.*?)</artifactId>(?![\s\S]*?</\1>)'
[regex]::Matches($pomRaw, $matchPattern) | ForEach-Object { $_.Groups[2].Value.Trim() }

正则逻辑说明

  • (?s):开启单行匹配模式,允许元字符匹配换行符,适配xml换行排版的场景
  • 前后两个负向零宽断言做双重校验:确保当前匹配的artifactId节点,既没有被包裹在<parent>/<build>/<dependencies>的起始标签之后,也不会出现在这三个标签的对应闭合标签之前,从根本上排除三个标签块内部的嵌套节点
  • 非贪婪匹配(.*?)提取artifactId标签内的文本,最后用Trim()处理掉标签内可能存在的换行、空格缩进

注意:该方案仅适用于标签格式规范、无异常交叉嵌套的标准Maven pom文件,若文件存在标签未闭合、标签交叉嵌套的异常格式,匹配结果可能存在偏差。

扩展说明

如果后续需要额外排除其他标签(比如<dependencyManagement>、<profiles>)内的artifactId,只需要在正则的(parent|build|dependencies)分组里用|分隔追加对应的标签名即可。

内容的提问来源于stack exchange,提问作者wehelpdox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:31:18