【发布时间】:2019-06-26 18:02:28
【问题描述】:
我有一个字符串some\string/with/**/special\chars\haha。在变量中我持有chars 字符串,我尝试删除之前的所有内容,包括chars,所以预期的输出将是\haha
我试过了:
$temp = "some\string/with/**/special\chars\haha"
$tmp="chars"
$temp -replace '(?s)^.*$tmp', ''
和
$temp -replace '(?s)^.*$([regex]::Escape($tmp))', ''
但唯一有效的是当我将字符串直接放入正则表达式条件时。只有这个例子给出了预期的输出:
$temp -replace '(?s)^.*chars', ''
我做错了什么?
编辑:
我需要在正则表达式中使用变量,因为我遍历了多个像这样的字符串,而我想要删除的部分并不总是具有相同的字符串(例如:some\string/with/**/special\chars\haha -> \haha;C:\st/h/*/1234\asdf\x -> \x)。所以总而言之,我在正则表达式中使用变量时遇到问题,而不是正则表达式本身,因为当我用字符串替换变量时,它按预期工作(如上所示)
【问题讨论】:
-
此帖子中的 PS 标签无效。我对你的问题感到困惑,你在技术上没有做错任何事,因为你有最终命令的预期输出
-
我需要在正则表达式中使用变量。当我使用变量时,命令的输出与输入相同。另一方面,当我使用有问题的示例中的字符串时,我会收到正确的输出。所以我需要帮助在正则表达式中使用变量。我会进一步澄清这个问题
-
这里没有替换变量
$tmp,因为单引号字符串不受字符串插值的影响:'(?s)^.*$tmp'。替换引号将启用此功能,但我不确定您的正则表达式是否会给出您正在寻找的结果。
标签: powershell