gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:49:27 25 4
gpt4 key购买 nike

这是我的字符串:

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

我想在 $s 中插入“.NEW”,使其看起来像这样:

 "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]?

最佳答案

Why can't . stand in for [a-z]?

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


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

所以通过使用下面的正则表达式:

(?=\..+$)

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

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

关于regex - Powershell RegEx - 使用 -replace with ?= 插入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23765280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com