分析字符的问题

呵呵,我是建议正则中含中文的就那样做,以免不必要的错误或者警告
你的问题先把你是什么系统,perl版本,代码和测试用的数据贴上来再说,因为有很多种情况
在此之前,如果你的系统是中文windows,你可以先试试把你的程序另存为 utf8 编码格式试试:-)




   

这个是代码--[quote]<br.
这个是代码
[quote]
use encoding "utf8",STDOUT=>"euc-cn";
open(FILE,"<:encoding(gb2312)","file.txt")||die "opening file.txt:$!";
open(RESULT,">encoding(gb2312)","result.txt")||die "opening result.txt:$!";
while(<FILE>)
{
$chinese_char="北京";
if(m:(.{20})(\Q$chinese_char\E)(.{20}):)
{
print RESULT $1;
print RESULT " $2 ";
print RESULT "$3\n";
}
}
close (FILE);
close (RESULT);
[/quote]

file.txt里的内容是人民日报的语料,弄一小段过来~
[quote]
20000201-01-001-001/m 去年/t 全国/n 打私/vn 工作/vn 成绩/n 显著/a
20000201-01-001-002/m 查获/v 走私贩私/l 案件/n 二万/m 多/m 起/q ,/w 案值/n 127亿/m 元/q
20000201-01-001-003/m 本报/r 北京/ns 1月/t 31日/t 讯/Ng 记者/n 赵志文/nr 报道/v :/w 记者/n 从/p [海关/n 总署/n]nt 获悉/v ,/w 1999年/t ,/w 我国/r 打击/v 走私/vn 工作/vn 取得/v 显著/a 成绩/n 。/w 全国/n 海关/n 、/w 公安/n 、/w 工商/n 等/u 部门/n 共/d 查获/v 走私贩私/l 案件/n 21117/m 起/q 、/w 案值/n 127.2亿/m 元/q ,/w 比/p 1998年/t 分别/d 增加/v 36.2%/m 和/c 减少/v 39.0%/m 。/w
20000201-01-001-004/m 经过/v 一/m 年/q 多/m 各/r 部门/n 的/u 艰苦/a 奋战/vn ,/w 大规模/d 走私/v 得到/v 基本/a 控制/vn ,/w 主要/b 标志/n 是/v :/w 内地/s 统计/v 自/p 香港/ns 的/u 进口额/n 与/c 香港/ns 统计/v 对/p 内地/s 的/u 出口额/n 趋于/v 平衡/a 。/w 为/p 国有/vn 企业/n 脱困/v 创造/v 了/u 有利/a 条件/n 。/w 非法/b 贸易/vn 受到/v 遏制/vn ,/w 正常/a 贸易/vn 进口/vn 大幅/d 增长/v ,/w 海关/n 税收/n 大幅度/d 增长/v 。/w
20000201-01-001-005/m 去年/t ,/w 海关/n 等/u 执法/vn 部门/n 常备不懈/i ,/w 严防/v 猛打/v ,/w 始终/d 保持/v 了/u 反/v 走私/vn 的/u 高压/n 态势/n 。/w 连续/ad 组织/v 了/u 打私/vn 联合/vn 行动/vn 和/c 专项/b 斗争/vn 。/w 重点/d 打击/v 进出口/vn 贸易/vn 渠道/n “/w 三假/j ”/w (/w 假/a 批文/n 、/w 假/a 单证/n 、/w 假/a 印章/n )/w 、/w “/w 三/m 伪/Ag ”/w (/w 伪报/v 品名/n 、/w 价格/n 、/w 数量/n )/w 、/w “/w 飞/v 料/n ”/w 、/w 集装箱/n 藏匿/v 等/u 走私/vn 活动/vn ,/w 取得/v 重大/a 战果/n ,/w 同时/c 加强/v 了/u 对/p 进出口/vn 货物/n 正面/d 监管/v 。/w
20000201-01-001-006/m 尽管/c 1999年/t 全国/n 打私/vn 工作/vn 取得/v 了/u 显著/a 的/u 成绩/n ,/w 但/c 当前/t 走私/v 的/u 种种/q 动态/n 仍/d 不容/v 乐观/a ,/w 如/v 进出口/vn 贸易/vn 渠道/n 瞒骗/v “/w 闯/v 关/n ”/w 走私/v 仍/d 很/d 严重/a ,/w 局部/n 地区/n 走私/v 屡/d 打/v 不/d 止/v ,/w 走私/vn 主体/n 仍/d 以/p 法人/n 为主/v ,/w 三资/j 企业/n 已/d 上升/v 为/v 主要/b 走私/vn 当事人/n ,/w 化工/n 原料/n 、/w 纺织/n 原料/n 、/w 成品油/n 、/w 食用油/n 、/w 汽车/n 、/w 香烟/n 等/u 仍/d 是/v 主要/b 走私/vn 商品/n 。/w 有关/vn 部门/n 表示/v 将/d 常备不懈/i ,/w 严防/v 猛打/v ,/w 继续/v 保持/v 对/p 走私/vn 分子/n 的/u 高压/n 态势/n ,/w 严防/v 走私/v 回潮/v 。/w[/quote]
应该和语料无关,我用别的.txt试过,结果一样
麻烦你啦~~




   

只要将你的程序另存为 utf.
只要将你的程序另存为 utf8 编码格式即可
好奇心使我昨天认真看了一.
好奇心使我昨天认真看了一下encoding的作用.像你的代码,如果操作的全部是GBK编码的字符.那么
use encoding "utf8"反而累了你.
你只要改为
use encoding "gbk"就可以了...

why?因为你编辑源代码的时候是在GBK字符集环境下,那么你输入的字符就是属于GBK字符集的.你用utf8,就会导致PERL的抱怨.而你use encoding "gbk",PERL就会觉得舒舒服服了.

if(m:(.{10})(北京/ns)(.{10}):)

就像上面一句,你输入的是GBK编码的字符.如果你坚持要use encoding "utf8"我相信你将"北京"两字转为UTF8后就OK啦.
[CCB]1[/CCB]--好了,都.
[CCB]1[/CCB]
好了,都出来了~~还是我没弄明清楚,这下好了,嘿嘿!学会了好多东西!不胜感激两位!以后再有问题还请多多指教
^_^
呵呵,一直当你的系统环境和我一样是 linux utf8 环境
因此,提问前先说明你的系统环境可以少走不少弯路