complex-在Powershell c#中用Regex替换
本文关键字:Regex 替换 中用 Powershell complex- | 更新日期: 2023-09-27 18:23:46
以下Regex:
(?<=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"
由于只有第一篇文章正在操作。
在替换字符串不使用regex并且是一个简单字符串的其他地方,也可以使用相同的脚本。
输入类型错误:
[$string] $string = Get-Content sample.txt
然而,字符串数组有效:
[$string[]] $string = Get-Content sample.txt
您只需要一个否定字符类[^"]+
(请参阅我的这篇文章,我在其中解释了'[^"']+
的工作原理)。然而,也要注意,('s+)?
与's*
相同。如果您不打算使用捕获组,则无需在regex中添加过多的捕获组。
使用
(?<=href's*='s*")(?!'s*http)(?!//)[^"]+
参见regex演示
以下是它匹配的内容:
(?<=href's*='s*")
-如果href
后面跟着0个或多个空白符号,后面跟着=
,然后在…之前再加0个或更多空白(?!'s*http)
-如果当前位置后面没有0或更多的空白,后面紧跟着http
,并且(?!//)
-如果当前位置后没有//
[^"]+
-匹配除"
之外的1个或多个字符