免费注册 查看新帖 |

Chinaunix

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

变量赋值和匹配问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-26 21:51 |只看该作者 |倒序浏览
1,尝试$A="Power@Power_i[1]"; 可是为什么@不允许在其中。报语法错误! 这个问题如何解决啊?
2,如果原文本中有带”@“这样的字符,在匹配中用(.*)可以匹配下来带 @的字符串,将该字符串赋值给一变量,该变量可以打印,但是用这个变量去匹配寻找其他文件中同字符串,却无法匹配。 而且如果 $A="Power_i[1]",   该变量$A也不能用来匹配。好像是[]的问题,为什么[]不能存在变量中匹配? 如何做才好呢?

谢谢

论坛徽章:
0
2 [报告]
发表于 2009-03-26 22:16 |只看该作者
@那个要用转义符号 \  \@表示匹配@

论坛徽章:
0
3 [报告]
发表于 2009-03-27 11:32 |只看该作者
there is my code to test your problem:

=========================
#!/usr/bin/perl
$A="Power\@Power_i[1]";
if($A=~/Power\@Power_i\[1\]/){print $A;}
else {print "Oops";}
==========================


"[]" is used by match expression(m//), so you must use prefix "\" before "[" and "]".

by the way, if you use \ before @ in your variable $A, and you will get the correct result.
in m// you also use "\S+" to match your variable $A

论坛徽章:
0
4 [报告]
发表于 2009-03-27 11:55 |只看该作者
谢谢回复,但是我的意思不是这样
如果直接可以付值给变量当然是用"\",但是我现在的问题是,这串子符是从原文件匹配得来的,有的有@,有的有[,而我有必须二次利用这样的变量,于是就出现问题了。
请问如何办理?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2009-03-27 12:08 |只看该作者
原帖由 kezhang 于 2009-3-27 11:55 发表
这串子符是从原文件匹配得来的,有的有@,有的有[,而我有必须二次利用这样的变量,

什么意思?

论坛徽章:
0
6 [报告]
发表于 2009-03-27 17:49 |只看该作者
举例   文字如下:
fdsjakljk Power@Power_i[1]  dfjslajkj  888
我需要匹配到
Power@Power_i[1]  和 888 , 匹配Power@Power_i[1]我用的是 /.* \s(.*)\s.*/,  并且 $A=$1;
将该内容放入一中转文件中。 然后我需要继续再中转文件中重新匹配下该字符。但是$A 在 /$A/中用不了。
有没有办法,可以让我的 $A 能够被匹配呢?

论坛徽章:
0
7 [报告]
发表于 2009-03-27 17:53 |只看该作者
看看

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2009-03-27 22:00 |只看该作者
原帖由 kezhang 于 2009-3-27 17:49 发表
将该内容放入一中转文件中。 然后我需要继续再中转文件中重新匹配下该字符。但是$A 在 /$A/中用不了。

怎么个用不了法?

论坛徽章:
0
9 [报告]
发表于 2009-03-27 22:53 |只看该作者
原来的Power@Power_i[1]  是用/.* \s(.*)\s.*/,  并且 $A=$1;
然后去中转文件匹配,我想用/$A/来匹配,就不行啊!匹配不上哦。 有@和[]都不能再去匹配,能有办法吗?

论坛徽章:
0
10 [报告]
发表于 2009-03-28 10:37 |只看该作者
$b = 'Power@Power_i[1]';

$a = 'Power@Power_i[1]';

print 1 if $b =~ /\Q$a\E/;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP