zoukankan      html  css  js  c++  java
  • TCL基本语法2

    TCL基本语法2

    1、format和scan

    两个基本的函数,和C语言中的sprintf和scanf的作用基本相同。format将不同类型的数据压缩在字符串中,scan将字符串中的数据提取出来。

    set name Jack
    set age 100
    set worker [format "%s is %d years old" $name $age]
    puts $worker
    scan $worker "%s is %d years old" name_scan age_scan
    puts $name_scan and $age_scan

    基本上就是将变量组合然后分解的过程。

    Jack is 100 years old
    Jack and 100

    2、regexp

    匹配字符指令,就是将待测的字符串与正则表达式匹配,完全符合返回1,否则为0,后置参数变量可以接收每层的配置好的结果。

    puts  [ regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} ab ]
    
    #匹配参数服从正则表达式,但是又有区别
    #|     ---------两项取其一即可
    #(0x)?    -----对前面项0x进行0次或1次匹配
    #[0-9a-fA-F] ---0-9 和a-f的大小写都可出现
    #+   -------对于前面的项1次或多次匹配
    #^   -------从头开始匹配,头部不符合即失败
    #$   -------从尾部匹配,尾部不符合即失败
    
    regexp { ([0-9]+) *([a-z]+)} "there is 00100 apples" total num word
    puts $total
    $num
    $word
    #第一个变量是整个表达式的结果
    #第二个参数是第一次层的子表达式
    #第三个参数是第二层的子表达式
    #所谓的子表达式,就是括号覆盖的地方
    regexp {^((0x)?[0-9a-fA-F]+|[0-9]+)$} 0xab011cdf S1 S2 S3
    puts $S1
    $S2
    $S3
    1
     00100 apples
    00100
    apples
    0xab011cdf
    0xab011cdf
    0x

    第一个是匹配十六进制及10进制的数,匹配成功,结果正常。

    第二个是匹配数字加字符串,第一层是全匹配的,第二层前半部分是匹配数字的,第二层后半部分是匹配字符的。

    第三个是匹配十六进制和十进制数的,第一层是前后匹配都正确的,第二层是匹配正确的,第三层是0x匹配的。

    从第二个和第三个的区别可以看出,regexp后面的传递参数的层数是由括号决定的。{()()}的三个参数依次是大括号、左括号和右括号,{(())}则是外中内依次读取。

  • 相关阅读:
    blog网页模版
    Sidebyside assembly
    几种hash算法
    [软件调试学习笔记]防止栈缓冲区溢出的基于Cookie的安全检查机制
    erlang注意(经典)
    erlang 的源代码保护机制(经典)
    erlang 的源代码保护机制(经典)
    java反编译工具jad
    erlang注意(经典)
    java反编译工具jad
  • 原文地址:https://www.cnblogs.com/electricdream/p/13436905.html
Copyright © 2011-2022 走看看