当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 带有正则表达式的 PowerShell Switch Case

作者:精品下载站 日期:2024-12-14 05:15:32 浏览:16 分类:玩电脑

带有正则表达式的 PowerShell Switch Case


最近,我在研究PowerShell switch case的一些示例,学习了如何在PowerShell中的Switch case中使用Regex。让我用几个例子来向您解释一下。

在讨论将正则表达式与 PowerShell Switch 语句一起使用之前,让我向您展示一个 switch 语句的简单示例。

PowerShell Switch 语句

PowerShell 中的 Switch 语句与其他编程语言中的 switchcase 语句类似。它评估一个表达式并根据该表达式的值执行相应的代码块。这是一个基本示例:

$fruit = "apple"

Switch ($fruit) {
    "apple" { Write-Output "This is an apple." }
    "banana" { Write-Output "This is a banana." }
    "orange" { Write-Output "This is an orange." }
    default { Write-Output "Unknown fruit." }
}

在此示例中,Switch 语句检查 $fruit 变量的值并执行相应的代码块。如果 $fruit 是“apple”,则会打印“This is an apple”。如果它是“香蕉”,它会打印“这是香蕉。”,依此类推。如果没有任何情况匹配,则执行 default 块。

现在,让我向您展示如何在 PowerShell switch 语句中使用 Regex。

PowerShell Switch 语句中的正则表达式

正则表达式是定义搜索模式的字符序列。在 PowerShell 中,您可以将正则表达式与 -match 运算符一起使用,或者在 Switch 语句中使用 -regex 参数。

要在 Switch 语句中使用正则表达式,您需要指定 -regex 参数。这告诉 PowerShell 将大小写值解释为正则表达式。这是一个例子:

$text = "San Francisco, new york, LOS ANGELES, Dallas, miami"

Switch -Regex -CaseSensitive ($text) {
    "^San Francisco" { Write-Output "The text starts with 'San Francisco'." }
    "new york" { Write-Output "The text contains the city 'new york'." }
    "LOS ANGELES" { Write-Output "The text contains the city 'LOS ANGELES'." }
    "miami$" { Write-Output "The text ends with 'miami'." }
    default { Write-Output "No match found." }
}

在此示例中,Switch 语句使用正则表达式来匹配 $text 变量中的模式。

执行上述 PowerShell 脚本后,您可以在下面的屏幕截图中看到输出:

[玩转系统] 带有正则表达式的 PowerShell Switch Case

阅读 PowerShell ForEach 循环

使用 PowerShell 开关和正则表达式进行不区分大小写的匹配

默认情况下,使用正则表达式时,PowerShell Switch 语句不区分大小写。这意味着无论输入字符串中的字符大小写如何,它都会匹配模式。但是,如果需要,您可以显式指定区分大小写。让我们探讨一下使用 Switch 语句和正则表达式进行不区分大小写匹配的示例。

示例:使用正则表达式进行不区分大小写的匹配

假设您有一个表示不同类型水果的字符串的 PowerShell 列表,并且您希望对它们进行分类,而不管大小写(大写或小写)。以下是如何使用下面的 PowerShell 脚本来完成此操作。

$fruits = @("Apple", "banana", "CHERRY", "mango", "Pineapple")

foreach ($fruit in $fruits) {
    Switch -Regex ($fruit) {
        "apple" { Write-Output "Found an apple." }
        "banana" { Write-Output "Found a banana." }
        "cherry" { Write-Output "Found a cherry." }
        "mango" { Write-Output "Found a mango." }
        "pineapple" { Write-Output "Found a pineapple." }
        default { Write-Output "Unknown fruit: $fruit" }
    }
}

Switch 语句使用正则表达式模式来匹配本示例中的水果名称。因为 Switch 默认情况下,语句是不区分大小写的;无论大小写如何,它都会正确匹配“Apple”、“banana”、“CHERRY”、“mango”和“Pineapple”。

执行上述 PowerShell 脚本后,您可以在以下屏幕截图中看到输出。

[玩转系统] 带有正则表达式的 PowerShell Switch Case

查看 PowerShell 开关字符串包含

示例:使用正则表达式进行区分大小写的匹配

如果您需要强制区分大小写,请在 PowerShell Switch 语句中使用 -casesensitive 参数。以下是如何将前面的示例修改为区分大小写:

foreach ($fruit in $fruits) {
    Switch -Regex -CaseSensitive ($fruit) {
        "apple" { Write-Output "Found an apple." }
        "banana" { Write-Output "Found a banana." }
        "cherry" { Write-Output "Found a cherry." }
        "mango" { Write-Output "Found a mango." }
        "pineapple" { Write-Output "Found a pineapple." }
        default { Write-Output "Unknown fruit: $fruit" }
    }
}

在此修改后的示例中,Switch 语句仅在大小写与指定模式完全匹配的情况下才会匹配水果名称(例如,“apple”不会匹配“Apple”)。

在 PowerShell 中读取 While 循环

带有正则表达式示例的 PowerShell Switch Case

让我向您展示一些使用 Regex 的 PowerShell Switch 案例的示例。

示例 1:匹配数字

要匹配字符串中的数字,您可以在带有正则表达式的 Switch 语句中使用 \d 模式。这是一个例子。

$text = "Order number 12345 has been shipped."

Switch -Regex ($text) {
    "\d+" { Write-Output "The text contains digits." }
    default { Write-Output "No digits found." }
}

\d+ 模式与文本中的一个或多个数字匹配。

您可以在下面的屏幕截图中看到输出。

[玩转系统] 带有正则表达式的 PowerShell Switch Case

示例 2:匹配单词

要匹配字符串中的特定单词,您可以在带有 Regex 的 Switch 语句中使用单词边界 \b。这是完整的 PowerShell 脚本。

$text = "PowerShell is a powerful scripting language."

Switch -Regex ($text) {
    "\bPowerShell\b" { Write-Output "The text contains the word 'PowerShell'." }
    "\blanguage\b" { Write-Output "The text contains the word 'language'." }
    default { Write-Output "No matching words found." }
}

示例 3:匹配电子邮件地址

要匹配电子邮件地址,您可以在 PowerShell 的 switch case 中使用以下正则表达式模式。

$text = "Contact us at [email protected] for more information."

Switch -Regex ($text) {
    "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" { Write-Output "The text contains an email address." }
    default { Write-Output "No email address found." }
}

此模式与最常见的电子邮件地址格式匹配。

执行上述 PowerShell 脚本后,您可以在下面的屏幕截图中看到输出。

[玩转系统] 带有正则表达式的 PowerShell Switch Case

示例 4:组合多个模式

这是另一个例子;我将向您展示如何在 PowerShell 的 Switch 语句中组合多种模式。

您可以在单个 Switch 语句中组合多个正则表达式模式来处理更复杂的场景。例如,假设您想要使用下面的 PowerShell 脚本来匹配文本中不同类型的日志消息。

$log = "ERROR: Disk space is low. WARNING: CPU usage is high. INFO: System rebooted."

Switch -Regex ($log) {
    "ERROR:.*" { Write-Output "An error occurred." }
    "WARNING:.*" { Write-Output "A warning was issued." }
    "INFO:.*" { Write-Output "Informational message." }
    default { Write-Output "No log messages found." }
}

在此示例中,Switch 语句匹配不同的日志消息类型(ERROR、WARNING、INFO)并执行相应的代码块。

示例 5:解析日志文件

让我向您展示如何在 switch 语句中使用正则表达式来解析日志文件的另一个示例。

这是一个包含不同类型消息的日志文件,您希望使用下面的 PowerShell 脚本对它们进行分类。

$logMessages = @(
    "ERROR: Disk space is low.",
    "WARNING: CPU usage is high.",
    "INFO: System rebooted.",
    "ERROR: Network connection lost."
)

foreach ($message in $logMessages) {
    Switch -Regex ($message) {
        "ERROR:.*" { Write-Output "Error: $message" }
        "WARNING:.*" { Write-Output "Warning: $message" }
        "INFO:.*" { Write-Output "Info: $message" }
        default { Write-Output "Unknown message type: $message" }
    }
}

此脚本循环访问每条日志消息,并使用 Switch 语句中的正则表达式模式根据消息类型(错误、警告、信息)对其进行分类。

查看下面的屏幕截图以了解输出。

[玩转系统] 带有正则表达式的 PowerShell Switch Case

示例 6:验证用户输入

假设您想要验证用户输入的不同类型的数据,例如电子邮件地址、电话号码和邮政编码。以下是在 Switch 语句中使用正则表达式的方法:

function Validate-UserInput {
    param (
        [string]$input
    )

    Switch -Regex ($input) {
        "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$" { Write-Output "Valid email address." }
        "^\d{10}$" { Write-Output "Valid phone number." }
        "^\d{5}(-\d{4})?$" { Write-Output "Valid postal code." }
        default { Write-Output "Invalid input." }
    }
}

# Example usage
Validate-UserInput "[email protected]"
Validate-UserInput "1234567890"
Validate-UserInput "12345-6789"
Validate-UserInput "invalid-input"

在此示例中,Validate-UserInput() 函数接受用户输入字符串。它使用带有正则表达式模式的 Switch 语句来验证输入是否是有效的电子邮件地址、电话号码或邮政编码。如果输入与任何模式都不匹配,则会打印“无效输入”。

示例 7:从文本中提取数据

您还可以将正则表达式与 Switch 语句结合使用,从文本字符串中提取特定数据。例如,让我们使用 Regex 和 Switch 语句从文本中提取日期。

$text = "The project started on 2024-01-15 and ended on 2024-07-10."

Switch -Regex ($text) {
    "\b\d{4}-\d{2}-\d{2}\b" { Write-Output "Date found: $matches[0]" }
    default { Write-Output "No dates found." }
}

在此示例中,正则表达式模式 \b\d{4}-\d{2}-\d{2}\b 与 YYYY-MM-DD 格式的日期匹配。 Switch 语句提取并打印文本中找到的任何日期。

我希望您现在知道如何将 Regex 与 PowerShell Switch 结合使用。我们讨论了很多例子。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯