Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 为什么powershell会删除其中一个'$';何时更换?_Regex_Powershell - Fatal编程技术网

Regex 为什么powershell会删除其中一个'$';何时更换?

Regex 为什么powershell会删除其中一个'$';何时更换?,regex,powershell,Regex,Powershell,我一直在挠头,最终只用了String.Replace,但是,我想知道Powershell在做什么,有人能给我解释一下吗 >"aaa" -replace "aaa", 'GG$$`~~' 结果: GG$`~~ 而不是 GG$$`~~ 我的印象是单引号阻止了字符串中内容的扩展,这与正则表达式有关吗?如果我在每一美元和背面打勾之间放点东西,它会起作用,但那不是我想要的 编辑: 这似乎是多种因素的结合: "aaa" -replace "aaa", '$$' --> "$" "aaa"

我一直在挠头,最终只用了String.Replace,但是,我想知道Powershell在做什么,有人能给我解释一下吗

>"aaa" -replace "aaa", 'GG$$`~~'
结果:

GG$`~~
而不是

GG$$`~~
我的印象是单引号阻止了字符串中内容的扩展,这与正则表达式有关吗?如果我在每一美元和背面打勾之间放点东西,它会起作用,但那不是我想要的

编辑:

这似乎是多种因素的结合:

"aaa" -replace "aaa", '$$' --> "$"
"aaa" -replace "aaa", '$`' --> ""

我仍然不明白它为什么这样做,尽管在普通正则表达式中,一个美元符号(“$”)表示字符串的结尾

在上面的示例中,您在带$符号的字符串后面有回勾,因此它不会在该字符串上转义: 根据这里的说法:


它应该是:“GG`$~`

在普通正则表达式中,美元符号(“$”)表示字符串的结尾

在上面的示例中,您在带$符号的字符串后面有回勾,因此它不会在该字符串上转义: 根据这里的说法:


它应该是:“GG`$~`

在replace
$
中表示反向引用

例如,如果您使用:

"aaa" -replace "(aaa)", 'GG$1`~~'
GGaaa`~~
使用:

"aaa" -replace "(aaa)", 'GG$$1`~~'
GG$1`~~
因此,真正放置
$
意味着您正在放置一个文本
$
字符。如果变量不存在

"aaa" -replace "aaa", 'GG$`~~'
GG~~
shell尝试查找变量
$`
,但由于它不存在,因此会得到一个空字符串

所以,为了

GG$$`~~
您必须使用4$:

"aaa" -replace "(aaa)", 'GG$$$$`~~'
GG$$`~~
每对
$$
表示一个文本
$

用同样的逻辑

"aaa" -replace "aaa", '$$' --> "$"
"aaa" -replace "aaa", '$`' --> "" //Because the variable $` doesn't exist, it's 'null'.

在replace
$
中,表示反向引用

例如,如果您使用:

"aaa" -replace "(aaa)", 'GG$1`~~'
GGaaa`~~
使用:

"aaa" -replace "(aaa)", 'GG$$1`~~'
GG$1`~~
因此,真正放置
$
意味着您正在放置一个文本
$
字符。如果变量不存在

"aaa" -replace "aaa", 'GG$`~~'
GG~~
shell尝试查找变量
$`
,但由于它不存在,因此会得到一个空字符串

所以,为了

GG$$`~~
您必须使用4$:

"aaa" -replace "(aaa)", 'GG$$$$`~~'
GG$$`~~
每对
$$
表示一个文本
$

用同样的逻辑

"aaa" -replace "aaa", '$$' --> "$"
"aaa" -replace "aaa", '$`' --> "" //Because the variable $` doesn't exist, it's 'null'.

但是我想要结果中的两个$signs和backtick,也不是它匹配的模式,而是替换中包含字符的字符串,为什么该字符串要服从regex的“字符串结束”特性?我猜这是因为替换还可以包含regex(标准),所以它只是经过与搜索字符串相同的处理,但我希望结果中有两个$signs和backtick,而且它匹配的不是模式,而是字符串中有字符的替换,为什么该字符串要服从正则表达式的“字符串结束”功能?我猜这是因为替换也可以包含正则表达式(标准),所以它只需要经过与搜索字符串相同的处理,您可能需要转义
$
(注意
$
是正则表达式中的一个特殊字符).Check看起来你是对的,我只是没想到要用替换字符串来处理它…所以问题只是$$,
“aaa”-替换“aaa”,“$#GG$$$``~~~'->$#GG$`~
你可能需要转义
$
(注意,
$
在regex中是一个特殊字符)。Check看起来你是对的,我只是没想到要用替换字符串来处理它……所以问题只出在$$上,
“aaa”-替换“aaa”、“$#GG$$``~~'->$#GG$`~~
谢谢!这是我需要的关键信息……”反向引用“:)谷歌在尝试搜索符号时没有太大帮助。谢谢!这是我需要的关键信息……”反向引用“:)谷歌在搜索符号时没有太大帮助。