【问题标题】:PowerShell regex for encoding API filter into a URL用于将 API 过滤器编码为 URL 的 PowerShell 正则表达式
【发布时间】:2021-10-05 14:27:42
【问题描述】:

我有一个需要为 URL 编码的字符串,所以我必须替换某些字符的一些实例。

例如:

filter=prop1:"folder1/folder2",prop2>:"string & string",prop3~"d:d"

在本例中,“filter=”以及每个属性名称和运算符(“prop1:”、“prop2>:”和“prop3~”)需要保留。正斜杠、& 符号、空格和最后一个冒号(在 d:d 中)需要替换为 %2F、%26、%20 和 %3A

filter=prop1:"folder1%2Ffolder2",prop2>:"string%20%26%20string",prop3~"d%3Ad"

使用此应用程序,属性和值可以通过以下方式分隔:

>:
<:
>
<
!:
:
~
!~

我想在每对的“值”部分替换的字符:

&
$
+
,
/
:
;
=
?
@
space
"
<
>
#
%
{
}
|
\
^
~
[
]

最有效的方法是什么?

【问题讨论】:

    标签: regex powershell


    【解决方案1】:

    希望这会帮助你到达某个地方。

    $test = 'filter=prop1:"folder1/folder2",prop2>:"string & string",prop3~"d:d"'
    $pattern = '(?:>:|<:|:|>|<|!:|:|~|!~)(?:")(.*?)(?:")'
    $regex = [Regex]::new($pattern)
    $regex.Matches($test) | ForEach-Object {
        $test = $test -replace ([regex]::Escape($_.Groups[1].value)), ([uri]::EscapeDataString($_.Groups[1].value))
    }
    $test
    
    # Output
    filter=prop1:"folder1%2Ffolder2",prop2>:"string%20%26%20string",prop3~"d%3Ad"
    

    【讨论】:

    • 太棒了!我从未听说过 EscapeDataString。太好了,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多