在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5823|回复: 8

[求助] TCL中有关regexp匹配表达式的一个小问题

[复制链接]
发表于 2013-7-20 12:20:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我看到一本介绍TCL的资料中如此写道:
regexp 把匹配整个正规表达式的子字符串赋给第一个变量,匹配正规表达式的最左边的子表达式的子字符串赋给第二个变量,依次类推,例如:
% regexp { ([0-9]+) *([a-z]+)} " there is 100 apples" total num word
1
% puts " $total ,$num,$word"
100 apples ,100,apples
--------------
我的问题是,word为什么不是there呢?
我对文中依此类推的理解是,匹配正规表达式的第二个子表达式([a-z]+)的子字符串(我认为这里应该是there)将被赋给第三个变量word。不知道我的理解是否正确。求高手指导菜鸟.
发表于 2013-7-20 15:59:19 | 显示全部楼层
个人感觉regexp 把匹配整个正规表达式的子字符串赋给第一个变量这句话有歧义,从答案来看的话,它的意思是把有多个字符的匹配结果中的第一个字符赋给第二个变量,第二个字符赋给第三个变量。。。等高手给出正确解释。。。
 楼主| 发表于 2013-7-20 22:42:48 | 显示全部楼层
回复 2# chunjiahua

那个应该没有歧义。
发表于 2013-7-22 17:55:00 | 显示全部楼层
回复 1# zzjseu


    word是there的话,num是啥?
 楼主| 发表于 2013-7-23 14:20:37 | 显示全部楼层
回复 4# sjtusonic


    num 当然是 100,这个没问题。为什么word不是there呢?难道默认是从字符串中的“100”开始匹配的吗?
    文中讲到把匹配整个表达式的子字符串赋给第一个变量total,这里是“100 apples" 没问题;把匹配最左边的子表达式的子字符串赋给第二个变量num,这里是“100”没问题;然后我对这个“依此类推”理解不是很清晰,我的理解是把匹配‘从左数第二个子表达式’的子字符串赋给第三个变量word,问题是,满足这个条件的子字符串该是哪个呢?如果从整个字符串开始位置找,应该是"there"吧?因为“there“完全满足匹配条件。但是如果从“100”之后开始找,那么就是文中所讲的“apples”。
 楼主| 发表于 2013-7-23 15:03:21 | 显示全部楼层
回复 2# chunjiahua
后面又跑了一个,结果就像你说的那样,文中讲得确实有歧义。

% regexp { ([a-z]+) *([0-9]+)} "there is 100 apples" total num word
1
%  puts "$total,$num,$word"
is 100,is,100
发表于 2013-7-23 15:30:18 | 显示全部楼层
回复 5# zzjseu


    { ([a-z]+) *([0-9]+)}

整体是一个正则表达式,意义为“一个word在先,后面一个num”。

    { ([0-9]+) *([a-z]+)}

则相反。

建议你看看这个里面的EXAMPLES:
http://www.tcl.tk/man/tcl8.6/TclCmd/regexp.htm
 楼主| 发表于 2013-7-23 23:03:52 | 显示全部楼层
回复 7# sjtusonic


    我明白你的意思。你给的网址我也看了,跟我看到的资料没有区别。我只是觉得文中说明不够精确。
发表于 2013-7-24 15:58:56 | 显示全部楼层
文中说:匹配正规表达式的最左边的子表达式,你可以理解为首先要匹配正则表达式,再匹配子表达式。
汉语理解的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-6 07:33 , Processed in 0.022854 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表