【问题标题】:why this regex does not work in powershell?为什么这个正则表达式在 powershell 中不起作用?
【发布时间】:2021-03-14 02:29:59
【问题描述】:
$pattern = 'trigger(.+?)(\r|\n|\r\n){2}'
Write-Host "PATTERN $pattern"
Write-Host ("- trigger: blah`n blah`n blah blah`n`n not blah" -replace $pattern, "trigger: none")

输出应该是“- trigger: none not blah”

【问题讨论】:

  • 此正则表达式与您的输入字符串 see here 不匹配。据我所知,您的输入不包含换行符,但正则表达式强制换行(即使这种模式看起来有点奇怪)。尝试使用trigger(.+?)[\r\n]*
  • 为什么要为一个 powershell-question 标记 C#?

标签: c# regex powershell


【解决方案1】:

有两个问题:

  • .+ 匹配除换行符以外的所有内容,使用内联标志 (?s) 或修改后的点 [\S\s]+
  • \r\n 是 Windows 换行符,\n *unix;因此最好将 \r 设为可选 ?: (\r?\n)
$pattern = 'trigger([\s\S]+?)(\r?\n){2}'
Write-Host "PATTERN $pattern"
Write-Host ("- trigger: blah`n blah`n blah blah`n`n not blah" -replace $pattern, "trigger: none")

- trigger: none not blah

【讨论】:

    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多