[玩转系统] 带有正则表达式的 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
语句与其他编程语言中的 switch
或 case
语句类似。它评估一个表达式并根据该表达式的值执行相应的代码块。这是一个基本示例:
$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 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 开关字符串包含
示例:使用正则表达式进行区分大小写的匹配
如果您需要强制区分大小写,请在 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+
模式与文本中的一个或多个数字匹配。
您可以在下面的屏幕截图中看到输出。
示例 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 脚本后,您可以在下面的屏幕截图中看到输出。
示例 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
语句中的正则表达式模式根据消息类型(错误、警告、信息)对其进行分类。
查看下面的屏幕截图以了解输出。
示例 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 结合使用。我们讨论了很多例子。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag