这是我的字符串:
$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]?
答案 0 :(得分:1)
为什么不能
.
代表[a-z]
?
点匹配单个字符(换行符除外),而不关心该字符是什么。使用[a-z]
专门匹配a
和z
之间范围内的单个字符。
使用你的第二个Lookahead示例,它首先匹配文字点.
,然后查找除换行序列(1
或更多次)之外的任何字符,因此它在第一个点开始匹配,在每个点重复自己直到字符串的结尾。 (假设您正在进行全球替换)。您的第一个Lookahead示例匹配字符串.
以及字符串末尾的a
到z
(1
或更多次)的任何字符。
因此,使用以下正则表达式:
(?=\..+$)
不消耗字符串中的字符,它在每个点之前断言,直到字符串结束。
Here .is .my .string
^ ^ ^
你的第一个Lookahead在最后一个点.
断言,其后跟着a
到z
的字符,这些字符锚定在字符串的末尾。
Here.is.my .string
^
^^^^^^ Any character of 'a' to 'z' (1 or more times)