如何在Powershell中使用带有空字符串的正则表达式用新行和单词替换单词?

时间:2014-08-18 01:55:55

标签: regex powershell replace powershell-ise

如何在Powershell中使用带有空字符串的正则表达式用新行和单词替换单词?

以下是示例内容...我需要删除所有use databasego我使用powershell和powershell_ise进行编辑:

  

使用database_instance

     

     

如果条件

2 个答案:

答案 0 :(得分:0)

您需要在换行符之后匹配Newlinespace

/use database_\w+\n\s*\w+/g

答案 1 :(得分:0)

$sql = @"
use database_instance

go

if condition
"@

$sql -ireplace 'use\s+\w+_\w+\s*(?:\r?\n)+\s*go' , ''

如何运作:

  1. -ireplace用于不区分大小写的正则表达式。
  2. 找到单词use后跟一个或多个空格\s+,后跟一个或多个单词字符\w+,然后是下划线_
  3. 一个或多个单词字符\w+,后跟0个或更多个空格(以防万一)
  4. 非捕获组(?:),因为我们不需要结果,这只是封装了一个占用windows和unix行结尾的换行符。它由一个可选的CR后跟一个LF组成,匹配一次或多次。
  5. 后跟0个或更多空格\s*,然后是go
  6. 替换为零!
  7. 这确实留下了一些空白空间,但这不应该是一个大问题,因为SQL解析器不关心。

    注意

    在你的评论中你说你试过了:

    $out -replace "/use database_\w+\n\w+/g"
    

    请注意,powershell不使用/regexhere/语法。正斜杠被视为文字,因此您指定的标志也是如此。默认情况下,替换是全局的,因此您无论如何都不需要g