[英]complex -replace with Regex in Powershell c#
正則表達式:
(?<=href(\s+)?=(\s+)?")(?!(\s+)?http)(?!//).+(?=")
與測試文章一起按預期工作:
href="//www.google-analytics.com/analytics.js">
href="https://www.google-analytics.com/analytics.js">
href="index.html">
href="..\index.html">
href="main.css">
href="..\assets\main.css">
href = " ..\assets\main.css ">
正如您在此處看到的: https : //t.co/PC0U9br3vn
然而:
[$string] $string = Get-Content sample.txt
[$string] $regex = '(?<=href(\s+)?=(\s+)?")(?!(\s+)?http)(?!(\s+)?//)(?!(\s+)?mailto).+(?=")'
$newString = $string -replace $regex, "..\$&"
$string
$newString
產生以下輸出:
//www.google-analytics.com/analytics.js"> href=" https://www.google-analytics.com/analytics.js"> href="index.html"> href="..\index.html"> href=" main.css"> href="..\assets\main.css"> href = " ..\assets\main.css "> href = "mailto://email@domain "> href = "..\..\..\assets\main.css"
//www.google-analytics.com/analytics.js"> href=" https://www.google-analytics.com/analytics.js"> href="..\index.html"> href="..\index.html"> href=" main.css"> href="..\assets\main.css"> href = " ..\assets\main.css "> href = "mailto://email@domain "> href = "..\..\..\assets\main.css"
因為只有第一篇文章正在進行中。
相同的腳本正在其他地方工作,其中替換字符串不使用正則表達式並且是一個簡單的字符串。
輸入的類型錯誤:
[$string] $string = Get-Content sample.txt
但是,字符串數組的工作原理:
[$string[]] $string = Get-Content sample.txt
你需要的只是一個否定的字符類 [^"]+
( 參見我的這篇文章,我解釋了\\[^"\\]+
工作 )。 但是,還要注意(\\s+)?
與\\s*
相同。 如果您不打算使用它們,則無需使用捕獲組來填充正則表達式。
采用
(?<=href\s*=\s*")(?!\s*http)(?!//)[^"]+
請參閱正則表達式演示
這是它匹配的內容:
(?<=href\\s*=\\s*")
- 如果有href
后跟0或更多空格符號,則后跟=
,然后再返回0或更多空格... (?!\\s*http)
- 如果在當前位置之后沒有0或更多空格后跟http
,並且... (?!//)
- 如果在當前位置之后沒有//
... [^"]+
- 匹配"
。 "
以外的1個或多個字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.