Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 正则表达式替换等号后的文本_Regex_Powershell - Fatal编程技术网

Regex 正则表达式替换等号后的文本

Regex 正则表达式替换等号后的文本,regex,powershell,Regex,Powershell,我试图在powershell中使用regex以每行为单位替换文本,但它会导致整行被替换为所需的值,但没有原始的前导文本和不需要的美元符号 包含要替换的行的示例文件: server.ssl.keystore-password=ffdsfsa server.ssl.key-password=ffdsaf 正则表达式示例: KeyStorePassword='4Z9dwVQn6wSk5H3kWX2SsxGWhZ/jTUrwgDSyfYNCxN0=' '(server.ssl.key-password

我试图在powershell中使用regex以每行为单位替换文本,但它会导致整行被替换为所需的值,但没有原始的前导文本和不需要的美元符号

包含要替换的行的示例文件:

server.ssl.keystore-password=ffdsfsa
server.ssl.key-password=ffdsaf
正则表达式示例:

KeyStorePassword='4Z9dwVQn6wSk5H3kWX2SsxGWhZ/jTUrwgDSyfYNCxN0='
'(server.ssl.key-password=).*',("`$1$KeyStorePassword")
但最终的结果是,它取代了下面的行:

$4Z9dwVQn6wSk5H3kWX2SsxGWhZ/jTUrwgDSyfYNCxN0=
当期望的结果是

server.ssl.key-password=4Z9dwVQn6wSk5H3kWX2SsxGWhZ/jTUrwgDSyfYNCxN0=

这里的问题是,当插入
$keystrepassword
时,开头的数字(
4
在本例中)被附加到
$1
,使得替换尝试使用捕获组
14
$14
)而不是捕获组1。命名捕获组可防止出现这种情况,或者在本例中,使用
{}
围绕捕获组名称

# Using unnamed capture groups
'server.ssl.key-password=ffdsaf' -replace '(server\.ssl\.key-password=).*',"`${1}$KeyStorePassword"
在PowerShell中,命名的捕获组语法为
(?匹配文本)
。然后可以用
${Name}
替换捕获组结果

# Using named capture groups
'server.ssl.key-password=ffdsaf' -replace '(?<field>server\.ssl\.key-password=).*',"`${field}$KeyStorePassword"
#使用命名的捕获组
'server.ssl.key password=ffdsaf'-replace'(?server\.ssl\.key password=).',“`${field}$keystrepassword”

我们可以用一个更简单的例子来重复这个问题:

$ExtraNumber = 2
'98' -replace '(?<12>\d)(\d)',"`$1$ExtraNumber"
9
$extrannumber=2
“98”-替换“(?\d)(\d)”,“`1$ExtraNumber”
9

我们命名第一个匹配以捕获组
12
。在替换中,
$extraname
将被计算为
2
,因此被替换的组将为
12
$12
)。

您是否已结婚使用正则表达式?您可能想考虑使用此帖子中概述的Buffiin ini解析功能:此帖子涵盖了书写:如果您命名捕获组,这个问题就消失了——> >代码>((Serv.SSL.KEY密码)=,*,‘${{字段} key SuthPrassAsWord)< /Cord>谢谢您的全面解释。所以我猜我遇到问题的唯一原因是我的替代者,所以碰巧从数字开始。@jwhit265是的,这就是原因。问题被错误地解决了,你被无缘无故地否决了。不幸的是,我对此无能为力。