免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2124 | 回复: 6
打印 上一主题 下一主题

[提问]关于匹配的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-24 02:07 |只看该作者 |倒序浏览
程序的目的是为了找出report都有那些M打头的单元,包含
net0 net1 net2 net3 net4 net5 net6 net7 net8 net9 net10 Vin+ Vout+ Vin- Vout- gnd!
例如,程序如下

  1. #!/usr/bin/perl -w
  2. #
  3. my @netlists = qw{net0 net1 net2 net3 net4 net5 net6 net7 net8 net9 net10 Vin+ Vout+ Vin- Vout- gnd!};

  4. open REPORT,"<","report";
  5. chomp (@lines = <REPORT>);
  6. foreach $_ (@netlists){
  7.         my $net = $_;
  8.         print "包含".$net."的有:";
  9.         foreach $_ (@lines){
  10.                 if(/$net\b/ && /^M/){
  11.                         my @fields = split / /, $_;
  12.                         print $fields[0]." ";
  13.                 }
  14.         }
  15.         print "\n";
  16. }

  17. close REPORT;
复制代码


处理的文件report如下


  1. .SUBCKT OTA VDD! Vin+ Vin- Vout+ Vout- gnd!
  2. *.PININFO Vin+:I Vin-:I Vout+:O Vout-:O VDD!:B gnd!:B
  3. M00 net10 Vout+ gnd! gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  4. M01 gnd! Vout- net10 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  5. M02 net10 Vout- gnd! gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  6. M03 gnd! Vout+ net10 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  7. M04 Vout+ net8 net6 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  8. M05 net6 net8 Vout+ gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  9. M06 Vout+ net8 net6 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  10. M07 net6 net8 Vout+ gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  11. M08 Vout- net8 net5 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  12. M09 net5 net8 Vout- gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  13. M10 Vout- net8 net5 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  14. M11 net5 net8 Vout- gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  15. M12 net6 net8 Vout+ gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  16. M13 Vout+ net8 net6 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  17. M14 net6 net8 Vout+ gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  18. M15 Vout- net8 net5 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  19. M16 net5 net8 Vout- gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  20. M17 Vout- net8 net5 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  21. M18 net5 net8 Vout- gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  22. M19 Vout+ net8 net6 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  23. M20 net5 net0 net10 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  24. M21 net10 net0 net5 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  25. M22 net6 net0 net10 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  26. M23 net10 net0 net6 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  27. M24 gnd! net0 net0 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  28. M25 gnd! net8 net8 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  29. M26 gnd! net2 net2 gnd! N W=4.999999874e-6 L=249.9999994e-9 M=1
  30. M27 net3 Vin+ net5 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  31. M28 net5 Vin+ net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  32. M29 net3 Vin+ net5 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  33. M30 net5 Vin+ net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  34. M31 net3 Vin+ net5 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  35. M32 net6 Vin- net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  36. M33 net3 Vin- net6 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  37. M34 net6 Vin- net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  38. M35 net3 Vin- net6 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  39. M36 net6 Vin- net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  40. M37 net3 Vin- net6 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  41. M38 net5 Vin+ net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  42. M39 net6 Vin- net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  43. M40 net3 Vin- net6 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  44. M41 net6 Vin- net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  45. M42 net3 Vin- net6 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  46. M43 net6 Vin- net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  47. M44 net3 Vin- net6 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  48. M45 net5 Vin+ net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  49. M46 net3 Vin+ net5 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  50. M47 net5 Vin+ net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  51. M48 net3 Vin+ net5 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  52. M49 net5 Vin+ net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  53. M50 net3 Vin+ net5 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  54. M51 net0 net0 VDD! VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  55. M52 net8 net8 VDD! VDD! P W=4.999999874e-6 L=999.9999975e-9 M=1
  56. M53 net2 net2 VDD! VDD! P W=4.999999874e-6 L=4.999999874e-6 M=1
  57. M54 VDD! net2 net7 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  58. M55 net4 net0 VDD! VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  59. M56 net3 net2 net4 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  60. M57 net4 net2 net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  61. M58 VDD! net0 net4 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  62. M59 net9 net2 VDD! VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  63. M60 Vout+ net8 net9 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  64. M61 net9 net8 Vout+ VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  65. M62 VDD! net2 net9 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  66. M63 net1 net0 VDD! VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  67. M64 net7 net2 VDD! VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  68. M65 net3 net2 net1 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  69. M66 Vout- net8 net7 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  70. M67 net1 net2 net3 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  71. M68 net7 net8 Vout- VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  72. M69 VDD! net0 net1 VDD! P W=4.999999874e-6 L=249.9999994e-9 M=1
  73. .ENDS
复制代码


输入结果如下

  1. 包含net0的有:M20 M21 M22 M23 M24 M51 M55 M58 M63 M69
  2. 包含net1的有:M63 M65 M67 M69
  3. 包含net2的有:M26 M53 M54 M56 M57 M59 M62 M64 M65 M67
  4. 包含net3的有:M27 M28 M29 M30 M31 M32 M33 M34 M35 M36 M37 M38 M39 M40 M41 M42 M43 M44 M45 M46 M47 M48 M49 M50 M56 M57 M65 M67
  5. 包含net4的有:M55 M56 M57 M58
  6. 包含net5的有:M08 M09 M10 M11 M15 M16 M17 M18 M20 M21 M27 M28 M29 M30 M31 M38 M45 M46 M47 M48 M49 M50
  7. 包含net6的有:M04 M05 M06 M07 M12 M13 M14 M19 M22 M23 M32 M33 M34 M35 M36 M37 M39 M40 M41 M42 M43 M44
  8. 包含net7的有:M54 M64 M66 M68
  9. 包含net8的有:M04 M05 M06 M07 M08 M09 M10 M11 M12 M13 M14 M15 M16 M17 M18 M19 M25 M52 M60 M61 M66 M68
  10. 包含net9的有:M59 M60 M61 M62
  11. 包含net10的有:M00 M01 M02 M03 M20 M21 M22 M23
  12. 包含Vin+的有:M27 M28 M29 M30 M31 M32 M33 M34 M35 M36 M37 M38 M39 M40 M41 M42 M43 M44 M45 M46 M47 M48 M49 M50
  13. 包含Vout+的有:M00 M01 M02 M03 M04 M05 M06 M07 M08 M09 M10 M11 M12 M13 M14 M15 M16 M17 M18 M19 M60 M61 M66 M68
  14. 包含Vin-的有:
  15. 包含Vout-的有:
  16. 包含gnd!的有:
复制代码


为什么找不到包含 Vin- Vout- gnd!的项呢?
原因是在匹配时候使用了 if(/$net\b/ && /^M/) 中的 \b。
如果不实用\b可以得到结果如下
  1. 包含net0的有:M20 M21 M22 M23 M24 M51 M55 M58 M63 M69
  2. 包含net1的有:M00 M01 M02 M03 M20 M21 M22 M23 M63 M65 M67 M69
  3. 包含net2的有:M26 M53 M54 M56 M57 M59 M62 M64 M65 M67
  4. 包含net3的有:M27 M28 M29 M30 M31 M32 M33 M34 M35 M36 M37 M38 M39 M40 M41 M42 M43 M44 M45 M46 M47 M48 M49 M50 M56 M57 M65 M67
  5. 包含net4的有:M55 M56 M57 M58
  6. 包含net5的有:M08 M09 M10 M11 M15 M16 M17 M18 M20 M21 M27 M28 M29 M30 M31 M38 M45 M46 M47 M48 M49 M50
  7. 包含net6的有:M04 M05 M06 M07 M12 M13 M14 M19 M22 M23 M32 M33 M34 M35 M36 M37 M39 M40 M41 M42 M43 M44
  8. 包含net7的有:M54 M64 M66 M68
  9. 包含net8的有:M04 M05 M06 M07 M08 M09 M10 M11 M12 M13 M14 M15 M16 M17 M18 M19 M25 M52 M60 M61 M66 M68
  10. 包含net9的有:M59 M60 M61 M62
  11. 包含net10的有:M00 M01 M02 M03 M20 M21 M22 M23
  12. 包含Vin+的有:M27 M28 M29 M30 M31 M32 M33 M34 M35 M36 M37 M38 M39 M40 M41 M42 M43 M44 M45 M46 M47 M48 M49 M50
  13. 包含Vout+的有:M00 M01 M02 M03 M04 M05 M06 M07 M08 M09 M10 M11 M12 M13 M14 M15 M16 M17 M18 M19 M60 M61 M66 M68
  14. 包含Vin-的有:M32 M33 M34 M35 M36 M37 M39 M40 M41 M42 M43 M44
  15. 包含Vout-的有:M01 M02 M08 M09 M10 M11 M15 M16 M17 M18 M66 M68
  16. 包含gnd!的有:M00 M01 M02 M03 M04 M05 M06 M07 M08 M09 M10 M11 M12 M13 M14 M15 M16 M17 M18 M19 M20 M21 M22 M23 M24 M25 M26
复制代码

可是如果不用\b,将会在统计net1的时候,把不包含net1但包含net10的项也统计在内
使用\b的时候,包含net1的有:
  1. 包含net1的有:M63 M65 M67 M69
复制代码

不实用\b的时候,包含net1的有:
  1. 包含net1的有:M00 M01 M02 M03 M20 M21 M22 M23 M63 M65 M67 M69
复制代码

显然是多统计了

于是出了使用\b的时候,找不到包含 Vin- Vout- gnd!的项
不实用\b的时候,net1统计错误
如何解决这个问题呢?请教各位了

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-11-24 08:57 |只看该作者
我的建议是分开处理..
因为\b找boundary的原则是
a-z,A-Z之後接一个非char....则中间就有一个\b...有些中文字编码中有那些特殊字符..
所以用\b有时也会得到怪异的结果...

但是因为+,-,!本身属於特殊字符...
所以要用$net去找....不能加\b..

因此将net0~net10与Vin+..Vout-分别存两个array..分别去处理..
会比较好...

[ 本帖最后由 apile 于 2006-11-24 09:00 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-11-24 12:44 |只看该作者
原帖由 apile 于 2006-11-24 08:57 发表
我的建议是分开处理..
因为\b找boundary的原则是
a-z,A-Z之後接一个非char....则中间就有一个\b...有些中文字编码中有那些特殊字符..
所以用\b有时也会得到怪异的结果...

但是因为+,-,!本身属於特殊字符... ...


可是你应该也发现了
使用$net检查含有Vout+和Vin+的时候是正确的……
只有在检查结尾是- !的字段的时候,搜不到东西……

还是谢谢你的回答,我就是分开处理的
只是感觉这样的代码不完美

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
4 [报告]
发表于 2006-11-24 21:46 |只看该作者
换成 /$net[ \t]/ 试试.

论坛徽章:
0
5 [报告]
发表于 2006-11-24 22:22 |只看该作者
Hallo,

if you use the element from @netlists as regex patten, you should pay much more attention
to these pattern, for eample:  "Vin+" => "+" is pattern Meta must be escaped!!!

regards, ulmer

论坛徽章:
0
6 [报告]
发表于 2006-11-27 15:05 |只看该作者
原帖由 q1208c 于 2006-11-24 21:46 发表
换成 /$net[ \t]/ 试试.

我按照你的方法把匹配表达式改为了
/$net[ \t]/
这时Vin- Vout- gnd!都可以准确匹配了
但是,Vin+和Vout+却得不到匹配结果了……

能否解释一下[ \t]的作用,谢谢

论坛徽章:
0
7 [报告]
发表于 2006-11-28 10:26 |只看该作者

其实这是一个正则问题

\t是不好的选项。
如果你的文件里面不是制表符,而是空格就不好用了。关键看你的格式。
我是这样/$net\s/你可以试一试。
另外关于那个+他是一个正则的元字符。所以你在你的netlist里面要写Vin\+ Vout\+,而不是Vin Vout.
建议你先看看一些正则。
然后你的perl才会好些。
\t制表符。
\s空格,相当于[ \f\n\r\t\v]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP