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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 215|回复: 6

[求助] 请教一个tcl转译语法的问题

[复制链接]
发表于 2025-2-12 09:44:43 | 显示全部楼层 |阅读模式

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

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

x
如图,在处理vivado的一些脚本时,有如下tcl语句

                               
登录/注册后可看大图


问题是:
1. 为什么在字符串匹配时,用first时,需要对字符串反斜杠(\),进行转译,才能匹配到反斜杠?
2. 为什么在字符串匹配时,用match时,反而不需要转译反斜杠就能匹配?




 楼主| 发表于 2025-2-12 14:33:23 | 显示全部楼层
可以点击图片查看更清晰的截图
发表于 2025-2-12 15:32:13 | 显示全部楼层
string match 是 glob style match,也就是*匹配任意字符,?匹配单字符,而转义符则有特殊含义:匹配接下来的单个字符

string match "\\" xxx;   # 由于转义符后面没有接下来的单个字符,会导致match结果恒0
string match "*\*" xxx; # 这里match收到的是“**”,match没有收到转义符
发表于 2025-2-12 17:00:03 | 显示全部楼层
这种使用 string match 效率很低,建议使用正则表达式。
 楼主| 发表于 2025-2-13 10:17:35 | 显示全部楼层


Challensys 发表于 2025-2-12 15:32
string match 是 glob style match,也就是*匹配任意字符,?匹配单字符,而转义符则有特殊含义:匹配接下来 ...


感谢解答,第二个我明白了,对第一个仍有个疑问:

string match "\\" xxx; 为什么\\不是转译反斜杠呢?


 楼主| 发表于 2025-2-13 10:18:45 | 显示全部楼层


murphy522 发表于 2025-2-12 17:00
这种使用 string match 效率很低,建议使用正则表达式。


好的,正则表达式确实能够规避这种问题。
发表于 2025-2-13 10:59:58 | 显示全部楼层


huanglc_IC 发表于 2025-2-13 10:17
感谢解答,第二个我明白了,对第一个仍有个疑问:

string match "\\" xxx; 为什么\\不是转译反斜杠呢?


tcl 会先进行 substitude 再执行命令,可对比:

puts "\\"; # 打印 \,因为双引号内部会被substitude,比如双引号内部的$var会被替换成变量的值
puts {\\}; # 打印 \\,因为花括号内部不会被substitude
你也可以显式进行substitude:

subst {\\}; # -> \
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-2-23 04:37 , Processed in 0.021257 second(s), 7 queries , Gzip On, Redis On.

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