正则表达式求助[求助]

正则表达式求助[求助]

正则表达式求助[求助]
小弟新学perl,在调试程序是出现以下问题。
由$string = "s/".$regpress."/".$express."/g";获得的正则表达式没法使用在while($text =~ $string)中。我改为while($text =~ s/str/abc/g)则可以正常运行。是甚么原因?请各位前辈告知。
代码如下:
#! /usr/bin/perl
#---------------------------------------
#教本名:exchang.pl
#脚本版本:1.0
#日期:7.14.2006
#作者:Allen Zhao
#描述:用户输入文件路径,查找项与替换项,读取文件的全部内容,依次在每行查找已知正则表达式。
#如果找到就替换。每次替换后提示用户是否继续操作。最后打印替换次数。
#修改记录:
#1.0/<7.14.2006>:原始版本
#---------------------------------------

#输入路径,查找项,替换项
print "Please input full file name: \n";
chomp($filename = <STDIN>);
print "Please input regular express: \n";
chomp($regpress = <STDIN>);
print "Please input exchange express: \n";
chomp($express = <STDIN>);

#建立查找替换表达式
$string = "s/".$regpress."/".$express."/g";
#打开文件开始查找
open(INFILE,"+<".$filename) || die("Could not open input.txt \n");
open(OUTFILE,">output.txt") || die("Could not open output.txt \n");
#读取一行内容
chomp($text=<INFILE>);

#创建计数变量
$counter=0;
#查询并替换正则表达式
while($text){
while($text =~ $string){
$counter++;
print OUTFILE "$text\n";
#print "Input c/C to continue. \n";
#$continue = <STDIN>;
#if(($continue eq "c") || ($continue eq "C")){
#next;
#}
#else{
#exit;
#}
}
chomp($text=<INFILE>);
}

if($counter!=0){
print "There are $counter matches."
}
close(INFILE);
close(OUTFILE);
我只能改成这样了----.
我只能改成这样了

while($text =~ s/$regpress/$express/ge ){

先拼好 $string 再使用的方法 还请高手指点哦
能否说清楚点?
先拼好$string为什么不能作为正则表达式呢?
就是说,对于一个字符串

$str = '1010101010';

如何能够得到一个二进制数,

$bin = 0b1010101010;

使 $bin 的各位数字与 $str 的各个字符相同?

反过来,又应该怎么写程序?
my $str = '101010101010';
my $bin = sprintf("0b%s",$str);
print "$bin\n";
my $string = substr($bin, 2);
print "$string\n";
是这个意思吗
谢谢 2 位,看来我还是没有说清楚。

我需要得到的是一个 二进制数。


QUOTE:
原帖由 longbow0 于 2008-12-4 15:44 发表
谢谢 2 位,看来我还是没有说清楚。

我需要得到的是一个 二进制数。

oct 可以吗?

[Copy to clipboard] [ - ]
CODE:
perl -e '$bin=oct("0b00000011");
            print $bin, "\n";
            printf("0b%08b\n", $bin)'
3
0b00000011

用 pack/unpack 实现

[Copy to clipboard] [ - ]
CODE:
my $str = '111111000000';
# my $bps = pack('b12', $str);
my $Bps = pack('B12', $str);

# print "b:\t'$bps'\n";
print "B:\t'$Bps'\n";



QUOTE:
原帖由 longbow0 于 2008-12-5 16:42 发表
用 pack/unpack 实现

my $str = '111111000000';
# my $bps = pack('b12', $str);
my $Bps = pack('B12', $str);

# print "b:\t'$bps'\n";
print "B:\t'$Bps'\n";

好办法。