perl 正则表达式/^\s*(.*?)\s*\=\s*\"(.*)\"/是什么意思?

open INPUT, "c:\\cellopt\\query_reg\\db.ini";
while(<INPUT>){
chomp;
if (/^\s*(.*?)\s*\=\s*\"(.*)\"/){
$$1 = $2;
}
}
close INPUT;
原程序执行有效.这个段落是原程序一部分,我查看过,原样复制过来,没有问题的.

代码没有问题。
将db.ini文件的内容逐行读出来,并进行正则匹配,将所有符合下面匹配规则的行的等号左边有效字符串(可能会为空)作为变量的名字,并将等号右边的有效字符串作为变量的值

匹配规则是,字符串必须是以至少一个空格开头,然后有或者没有除了换行符以外的任意字符串,然后再接至少一个空格,然后是=号,然后再接至少一个空格,然后是冒号”,然后是除了换行符以外的任意字符串,最后是冒号“
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-02-16
if (/^\s*(.*?)\s*\=\s*\"(.*)\"/) #匹配文件中每一行第一个字符串且该字符串要符合这样的规则:是连续的几个相同字符=连续的几个相同字符 如aaa=aaa 或者a=bbb或者 $$$=%%%%
$$1 = $2; # 将第一个匹配的字符串设置为变量对它赋值为等号右边的字符串
如: $aaa="aaa"或者$a="bbb"

希望能满意 呵呵

参考资料:perl编程24学时教程

第2个回答  2011-02-16
/^\s*(.*?)\s*\=\s*\"(.*)\"/
文件每次读一行,上述正则表达式默认匹配$_变量,主要是为了匹配ini文件格式,该表达式匹配格式为:
空格+任意的主键值,也可没有+空格=空格+要有双引号括起来的内容
例:
no = "1234"
= "2345"
注意上面的空格个数
第3个回答  2011-02-16
这段perl脚本是有问题的,要想打印出真正的$符号,必须要用到转义符\,所以应改写成

if (/^\s*(.*?)\s*\=\s*\"(.*)\"/){
\$$1 = $2;
至于含义,我认为应该是:
然后把其中每一行 xxxx xxxx="BxxxBxxBx" 的内容
赋值变量$xxxx xxxx=BxxxBxxBx,我在perl 5.8.6中试过
第4个回答  2011-02-16
将db.ini文件的内容读出来。
然后把其中每一行 AAA=BBB 的内容
赋值变量$AAA=BBB
相似回答