Powershell RegEx - 使用-replace和?=插入字符串

时间:2014-05-20 16:28:26

标签: regex powershell

这是我的字符串:

 $s = "Here.is.my.string"

我想插入" .NEW"进入$ s使它看起来像这样:

 "Here.is.my.NEW.string"

我不明白的是,这是有效的:

$s -ireplace '(?=\.[a-z]+$)',".NEW"    yields: "Here.is.my.NEW.string"

这不是:

 $s -ireplace '(?=\..+$)',".NEW"       yields: "Here.NEW.is.NEW.my.NEW.string"

为什么不能。代表[a-z]?

1 个答案:

答案 0 :(得分:1)

  

为什么不能.代表[a-z]

点匹配单个字符(换行符除外),而不关心该字符是什么。使用[a-z]专门匹配az之间范围内的单个字符。


使用你的第二个Lookahead示例,它首先匹配文字点.,然后查找除换行序列(1或更多次)之外的任何字符,因此它在第一个点开始匹配,在每个点重复自己直到字符串的结尾。 (假设您正在进行全球替换)。您的第一个Lookahead示例匹配字符串.以及字符串末尾的az1或更多次)的任何字符。

因此,使用以下正则表达式:

(?=\..+$)

不消耗字符串中的字符,它在每个点之前断言,直到字符串结束。

Here .is .my .string
    ^   ^   ^

See regex101 demo

你的第一个Lookahead在最后一个点.断言,其后跟着az的字符,这些字符锚定在字符串的末尾。

Here.is.my .string
          ^ 
            ^^^^^^ Any character of 'a' to 'z' (1 or more times)

See regex101 demo