LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 923|回复: 2

grep 函數奇怪的問題

[复制链接]
发表于 2006-5-12 21:46:50 | 显示全部楼层 |阅读模式
以下perl腳本
[PHP]
$file4 = "臨時.txt";
$file3 = "字.txt";
open (FILE3, "$file3") || die "打不開文檔“$file3”!";
open (FILE4, ">$file4") || die "無法創建文檔“$file4”!";
select FILE4;

@zf = <FILE3>;

# $sch = $zf[0];
# $sch = substr ($sch,0,6);    # 「字.txt」為UTF-8碼,此處取6剛剛好得到一個漢字,此步應該得到「啊」。

$sch = "ang";

@biet = grep (/$sch/, @zf);
print @biet;
[/PHP]
該腳本grep函數搜索「字.txt」,可以得到如下預期結果:

  1. 厊ang1
  2. 吧bang1
  3. 啊ang1
复制代码



但是,奇怪的是,以下腳本

[PHP]
$file4 = "臨時.txt";
$file3 = "字.txt";
open (FILE3, "$file3") || die "打不開文檔“$file3”!";
open (FILE4, ">$file4") || die "無法創建文檔“$file4”!";
select FILE4;

@zf = <FILE3>;

$sch = $zf[0];
$sch = substr ($sch,0,6);   # 「字.txt」為UTF-8碼,此處取6剛剛好得到一個漢字,此步應該得到「啊」。

# $sch = "ang";

@biet = grep (/$sch/, @zf);
print @biet;
[/PHP]

卻只能搜到「字.txt」的第一行,得不到預期結果:

  1. 啊a1
复制代码


預期結果應該是:

  1. 啊a1
  2. 啊b1
  3. 啊a2
  4. 啊ang1
复制代码

真是奇怪了,百思不得其解,究竟是怎麼回是呢?
grep 只搜索了「字.txt」的第一行,其他行均被忽略了。證明方法是,在
$sch = substr ($sch,0,6);
後加一行:
$sch = "$sch"."b";
這樣本來應該搜索得到「字.txt」第二行「啊b1」,但結果什麼都搜不出。因為第一行是「啊a1」,grep只搜了第一行。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2006-5-14 13:22:26 | 显示全部楼层
我明白了
@zf = <FILE3>;
這 @zf 的第一個元素有問題!
shift @zf; 後,再將 $sch = substr ($sch,0,6); 改為 $sch = substr ($sch,0,3); 就正常了。
UTF-8 一個漢字三字節。
回复 支持 反对

使用道具 举报

发表于 2006-5-14 16:36:52 | 显示全部楼层
UTF-8编码中中文为2~3个字节,并不一定完全是2个字节或3个字节~~

后面修改的这个代码,部分中文有效,部分可能也还是有问题~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表