Powershell匹配文件中的多行正则表达式



我有这样的正则表达式:

^(?m)[ ]{0,}<img[ ]{0,}(?:n(?:(?!<img).)*?){1,}[[]src[]]=[""|']{1}(.*?)[""|']{1}(?:n(?:(?!<img).)*?){0,}[>]{1}$

我想在文件中获得匹配的第一行,它匹配以下内容:

<img
*ngIf="amImg && amImg.sourcePath"
[src]="amImg.sourcePath"
[alt]="amImg.alt">
<p>asdasdasd asd</p>
<img
[src]="amImg.sourcePath"
[alt]="amImg.alt">

Regex工作完美,我已经测试了它在这里…
在本例中匹配为2:

<img
*ngIf="amImg && amImg.sourcePath"
[src]="amImg.sourcePath"
[alt]="amImg.alt">

:

<img
[src]="amImg.sourcePath"
[alt]="amImg.alt">

所以第一个匹配第一组的结果应该是amImg.sourcePath,它有一个linenumber
第二个匹配第一组的结果应该是amImg.sourcePath,它有另一个linenumber

我试过:

(select-string -path $path -pattern $pattern) | ForEach-Object{...}

等等…但是它甚至找不到匹配的…

经过一番头脑风暴,结果如下:

$path = ........
$content = Get-Content -Path $path -Raw
$regex = [regex] '(?m)^[ ]{0,}<img[ ]{0,}(?:r?n(?:(?!<img).)*?){1,}[[]src[]]=["|'']{1}(.*?)["|'']{1}(?:r?n(?:(?!(<)).)*?){0,}[>]{1}'
foreach ($m in $regex.Matches($content)) {
$lineNumber = ($content.Substring(0, $m.Index + 1) | Measure-Object -Line).Lines
"Found '$($m.Groups[1].Value)' at line $lineNumber" 
}

相关内容

  • 没有找到相关文章

最新更新