我有这样的正则表达式:
^(?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"
}