我需要在包含字母数字值的字符串中找到特殊字符。
我已经尝试了下面的代码片段,但它不起作用。
$Special_characters = ('\n|\r|\t|\a|\"|\`')
$Value = "g63evsy3swisnwhd83bs3hs9sn329hs\t"
if($Value -match $Special_characters)
{
Write-Host "Special characters are present"
}
else
{
Write-Host "special characters are absent"
}输出显示“特殊字符不存在”,即使在结尾有特殊字符。如何解决这个问题?
发布于 2019-07-05 06:18:47
这是一条单线线:
$Special_characters = '\n|\r|\t|\a|\"|\`'
$Value = "g63evsy3swisnwhd83bs3hs9sn329hs\t"
$result = @($Special_characters -split '\|' | % { $Value.Contains( $_ ) }).Contains( $true )当发现特殊字符时,$result为真,否则为false。
发布于 2019-07-05 05:49:20
$Special_Characters在这里是一个字符串,所以您的代码正在搜索整个单词(\n\r\r\\t\\a\a\“) to be found in$Value`,没有找到它。
您必须使用数组,而不是字符串,如下所示:
$Value = "g63evsy3swisnwhd83bs3hs9sn329hs\t"
$Special_Characters = @('\\n','\\r','\\t','\\a','\\"','\\`')
$Special_Characters | Foreach-Object {
if ($Value -match $_) {
"$_ is present"
} else {
"$_ is not present"
}
}Note
您必须放置双反斜杠(\),因为反斜杠在Powershell中被认为是转义字符;有关Powershell中反斜杠的更多信息,请查看这里
发布于 2019-07-05 07:34:01
这里有个误会。
反斜杠用于在正则表达式中定义一个特殊字符,例如\t定义一个制表符。
但PowerShell的情况并非如此。要在PowerShell中定义一个特殊字符,您需要使用回勾字符(参见:关于特殊人物),例如,Tab被写成`t。
换句话说,问题中的正则表达式模式是正确的,但输入字符串不是(与问题/标题所暗示的相反,在给定的输入字符串中实际上没有特殊字符“)。
它应该是:
"...hs9sn329hs`t" -match '\n|\r|\t|\a|\"|\`'
True由于它涉及单个(特殊)字符的列表,因此还可以考虑使用括号表达式(而不是OR“管道”字符):
"...hs9sn329hs`t" -match '[\n\r\t\a\"\`]'
TrueVisa相反:允许使用双引号在正则表达式模式中使用特殊字符,以便PowerShell计算字符串(但我建议不要这样做):
"...hs9sn329hs`t" -match "`n|`r|`t|`a|`"|``"
True如果问题中的输入字符串实际上是要检查的字符串(这意味着将反斜杠称为特殊字符,形式上不是),则需要检查\t而不是选项卡。为此,您需要转义正则表达式中的反斜杠,以便与\t匹配。
"...hs9sn329hs\t" -match '\\n|\\r|\\t|\\a|\\"|\\`'
Truehttps://stackoverflow.com/questions/56896979
复制相似问题