regexp命令
TCL使⽤命令regexp进⾏字符串和正则表达式的匹配。其格式为:
regexp ?switches? exp string ?matchVar??subMatchVar subMatchVar ...?
返回1则表⽰字符串和正则表达式匹配,返回0则表⽰不匹配。它最简单的形式要获取两个参数:正则表达式模式和输⼊字符串。例如:
regexp {^[0-9]+$} 510
→1
regexp {^[0-9]+$} -510
→0
这⾥的模式被括在⼤括号中,使得字符$、[0-9]被传给命令regexp,⽽不会触发变量替换和命令替换。建议总是把正则表达式括在⼤括号中。
如果regexp在输⼊字符串后还调⽤更多的参数,每⼀个参数都被作为⼀个变量名对待。第⼀个变量会存
⼊与整个正则表达式匹配的⼦字符串。第⼆个变量会存⼊与捕获到的第⼀个⼦表达式相匹配的⼦字符串;第三个变量会存⼊与捕获到的下⼀个⼦表达式相匹配的⼦字符串;以此类推。如果变量名的数量⽐捕获到的⼦表达式数量更多,多余的变量会被设置为空字符串。例如,执⾏如下命令后变量a的值为10 km,b的值为10,c的值为km.
regexp {([0-9]+) *([a-z]+)} "Walk 10km" a b c
这种取得部分配对的⼦字符串的能⼒使regexp可以⽤于解析⼯作。还可以在正则表达式前为regexp指定更多的选项。可以使⽤-start选项,在后⾯跟⼀个字符串中的字符索引,指定regexp从该位置开始查匹配。-all选项告诉regexp在字符串中查尽量多次的匹配,并返回总的匹配次数。-nocase选项指定了模式中的字母在字符串中查匹配时不区分⼤⼩写。-indices选项指明额外的变量不应该⽤于存放匹配的⼦字符串的值,⽽是存放给出⼦字符串范围的⾸字符和尾字符的索引列表。例如,执⾏下⾯这个命令后,变量a的值为59,b的值为56,c的值为89。
regexp -indices {([0-9]+) *([a-z]+)} "Walk10 km" a b c
-inline选项让regexp把匹配变量返回为⼀个数据列表。例如,下⾯这条命令返回了含有三个元素的列表,第⼀个元素是与整个表达式匹配的字符,后⾯两个元素是与捕获到的⼦表达式匹配的字符。
regexp -inline {([0-9]+) *([a-z]+)}"Walk 10 km"
→{10 km} 10 km
-1ine选项激活区分换⾏的匹配。指定这个选项后[^括号表达式和.绝不会与新⾏匹配,^原⼦除了它的普通功能外,与新⾏后的空字符串匹配,$原⼦除了它的普通功能外,与新⾏前的空字符串匹配。例如,下⾯这条命令返回了所有以ERROR字符串开头(这个字符串前⾯可能有空⽩)的⾏数。regex匹配
regexp -all -line -- {^[[:blank:]] *ERROR:}$text
regexp命令也⽀持⽤--选项明确地标志选项结束。在实际⼯作中建议总是使⽤--选项;否则如果您的模式以-字符开头,它可能被错误地解析为另⼀个选项。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论