tcl脚本语言之switch语句用法示例

在Tcl中,switch语句非常强大,可以处理字符串匹配和模式匹配。我们将详细说明如何使用字符串匹配以及三种模式匹配(-exact-glob-regexp),并举多个例子进行说明。

字符串匹配

示例 1:基本字符串匹配

#!/usr/bin/env tclsh

set user_input "hello"

switch $user_input {
    "hello" {
        puts "User said hello."
    }
    "goodbye" {
        puts "User said goodbye."
    }
    default {
        puts "Unknown input."
    }
}

示例 2:处理多种字符串

#!/usr/bin/env tclsh

set command "start"

switch $command {
    "start" {
        puts "Starting the process."
    }
    "stop" {
        puts "Stopping the process."
    }
    "pause" {
        puts "Pausing the process."
    }
    default {
        puts "Unknown command."
    }
}

模式匹配

-exact 模式匹配

-exact是默认模式,表示精确匹配。

示例 1:基本精确匹配

#!/usr/bin/env tclsh

set mode "active"

switch -exact $mode {
    "active" {
        puts "The system is active."
    }
    "inactive" {
        puts "The system is inactive."
    }
    default {
        puts "Unknown mode."
    }
}

示例 2:处理精确匹配

#!/usr/bin/env tclsh

set level "admin"

switch -exact $level {
    "admin" {
        puts "Administrator access granted."
    }
    "user" {
        puts "User access granted."
    }
    "guest" {
        puts "Guest access granted."
    }
    default {
        puts "Access level unknown."
    }
}

-glob 模式匹配

-glob允许使用通配符进行模式匹配。

示例 1:处理文件扩展名

#!/usr/bin/env tclsh

set filename "report.pdf"

switch -glob $filename {
    "*.txt" {
        puts "This is a text file."
    }
    "*.pdf" {
        puts "This is a PDF file."
    }
    "*.doc" - "*.docx" {
        puts "This is a Word document."
    }
    default {
        puts "Unknown file type."
    }
}

示例 2:处理不同模式输入

#!/usr/bin/env tclsh

set input "error-404"

switch -glob $input {
    "error-*" {
        puts "An error occurred."
    }
    "warning-*" {
        puts "A warning is issued."
    }
    "info-*" {
        puts "Informational message."
    }
    default {
        puts "Unknown message type."
    }
}

-regexp 模式匹配

-regexp允许使用正则表达式进行模式匹配。

示例 1:处理正则表达式匹配

#!/usr/bin/env tclsh

set text "Hello123"

switch -regexp $text {
    {^Hello} {
        puts "Text starts with 'Hello'."
    }
    {\d+$} {
        puts "Text ends with digits."
    }
    default {
        puts "No match found."
    }
}

示例 2:复杂正则表达式匹配

#!/usr/bin/env tclsh

set string "user@example.com"

switch -regexp $string {
    {^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$} {
        puts "Valid email address."
    }
    default {
        puts "Invalid email address."
    }
}

详细解释

字符串匹配

  • 基本字符串匹配:直接对比输入字符串和预定义的字符串,只有完全匹配时才执行相应的代码块。
  • 处理多种字符串:可以根据不同的命令执行不同的操作,通过default处理未知命令。

-exact 模式匹配

  • 基本精确匹配:与字符串匹配类似,但明确使用-exact选项表示精确匹配。
  • 处理精确匹配:根据不同的精确匹配条件执行相应操作。

-glob 模式匹配

  • 处理文件扩展名:使用通配符匹配文件扩展名,*.txt匹配所有以.txt结尾的文件。
  • 处理不同模式输入:使用通配符匹配不同模式的输入,如error-*匹配所有以error-开头的字符串。

-regexp 模式匹配

  • 处理正则表达式匹配:使用正则表达式匹配字符串,^Hello匹配所有以Hello开头的字符串。
  • 复杂正则表达式匹配:使用更复杂的正则表达式匹配,如验证邮箱地址的格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值