繁体   English   中英

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

[英]Powershell match multiline regex in file

我有这样的正则表达式:

^(?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">

正则表达式完美运行,我在这里测试......
在这种情况下,匹配项为 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" 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM