[英]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.