我有一个 pacfile,我正在尝试更新它并且需要删除两个字符串之间的内容;应保留字符串本身:
// OFFICE 365 DIRECT ACCESS
Run Code Online (Sandbox Code Playgroud)
和
// END OFFICE 365 DIRECT ACCESS
Run Code Online (Sandbox Code Playgroud)
例子:
// OFFICE 365 DIRECT ACCESS
if (isInNet(hostip, "23.103.132.0","255.255.252.0") || //EOP
isInNet(hostip, "23.103.136.0","255.255.248.0") || //EOP
isInNet(hostip, "23.103.144.0","255.255.240.0") || //EOP
isInNet(hostip, "23.103.191.0","255.255.255.0") || //EOP
// END OFFICE 365 DIRECT ACCESS
Run Code Online (Sandbox Code Playgroud)
我想删除顶线和底线之间的线
$Pacfile = Get-ChildItem .\o365.pac | Get-Content -Raw
$startstring= " \/\/ OFFICE 365 DIRECT ACCESS(.*? )\/\/END OFFICE 365 DIRECT ACCESS"
$NewPacfile = [regex]::match($Pacfile, $startstring).Groups[1].value
$NewPacfile
Run Code Online (Sandbox Code Playgroud)
$regex=@'
(?ms)^(\s*// OFFICE 365 DIRECT ACCESS\s*?\r?\n).*?\r?\n(\s*// END OFFICE 365 DIRECT ACCESS\s*)
'@
(Get-Content -Raw .\o365.pac) -replace $regex, '$1$2'
Run Code Online (Sandbox Code Playgroud)
-replace $regex, '$1$2'将正则表达式匹配的内容替换为它内部的第一个 ( $1) 和第二个捕获组 ( $2) (带括号的子表达式,(...))匹配的内容。
在这里,这些捕获组捕获包含感兴趣范围的字符串。
(?ms)集两者米ULTI线和小号英格尔行选项为正则表达式:
m意味着^并且$应该匹配每一行的开始和结束,而不是整个输入字符串。s装置,其元字符.应匹配\n字符太,使得这样的表达式.*可以用于匹配跨线。\r?\n 匹配单个换行符,包括 CRLF 和 LF 变体。
.*?匹配要删除的部分;注意?后面的非贪婪修饰符 ( ) .*,它确保匹配结束字符串的下一次出现。
| 归档时间: |
|
| 查看次数: |
780 次 |
| 最近记录: |