簡體   English   中英

復雜 - 在Powershell中使用Regex替換c#

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM