免费注册 查看新帖 |

Chinaunix

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

【请教】perl 匹配 反向的 中文字符 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-07 20:54 |只看该作者 |倒序浏览
本帖最后由 plp626 于 2012-08-07 21:12 编辑

我的机子是windows 系统;
cmd下,我用 dir/a/b/s E:\*.*> files.txt 得到files.txt, 当然,文本的编码是中文简体ansi(即gbk编码), 内容如下(只是举个例子):
  1. E:\xyz\123\A汉字.doc
  2. E:\中文\abc\123\pp.txt
  3. E:\mm\pic\哈哈\abc.jpg
  4. E:\shen\ab\啊\哦.jpg
  5. E:\a\b\e\c.jpg
复制代码
我只想匹配到

E:\xyz\123\A汉字.doc
E:\shen\ab\啊\哦.jpg

这两行
简略而精确的说,就是匹配 “文件名” 含有“宽字符”的行;
请问正则表达式该怎么写?

提前感谢大家了。。。



论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
2 [报告]
发表于 2012-08-07 21:31 |只看该作者
  1. #!/usr/bin/env perl

  2. use Encode qw(encode decode);

  3. while (<DATA>) {
  4.     ($name) = /.*\\(.*)/;
  5.     $name = decode('gb2312', $name);
  6.     print if $name =~ /\p{Han}/;
  7. }

  8. __DATA__
  9. E:\xyz\123\A汉字.doc
  10. E:\中文\abc\123\pp.txt
  11. E:\mm\pic\哈哈\abc.jpg
  12. E:\shen\ab\啊\哦.jpg
  13. E:\a\b\e\c.jpg
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-08-07 21:42 |只看该作者
回复 2# cdtits


    非常棒!

我把你的代码收藏了:
  1. while (<DATA>) {

  2.     ($name) = /.*\\(.*)/;
  3.     print if $name =~ /[\x80-\xff]/;

  4. }

  5. __DATA__
  6. E:\xyz\123\A汉字.doc
  7. E:\中文\abc\123\pp.txt
  8. E:\mm\pic\哈哈\abc.jpg
  9. E:\shen\ab\啊\哦.jpg
  10. E:\a\b\e\c.jpg
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-08-07 21:45 |只看该作者
本帖最后由 plp626 于 2012-08-07 21:49 编辑

回复 2# cdtits


    能否把你的这两句
($name) = /.*\\(.*)/;  
print if $name =~ /\p{Han}/;
讲解下, ($name) 和 $name 不同吗?
我把
print if $name =~ /\p{Han}/;
改成:
printf if $name =~ /[\x80-\xff]/ 输出结果相同, 我对自己这句的理解是,宽字符的高位都是从0x7f以后的字符,但不理解为什么可以匹配中英混合的文件名。。

论坛徽章:
0
5 [报告]
发表于 2012-08-07 22:13 |只看该作者
明白了:
  1. while (<DATA>) {

  2.     ($name1, $name2) = /(.*)\\(.*)/;
  3.         print "$name1   $name2\n";

  4. }

  5. __DATA__
  6. E:\xyz\123\A汉字.doc
  7. E:\f中文\abc\123\pp.txt
  8. E:\mm\pic\a哈d哈\abc.jpg
  9. E:\shen\ab\2啊\2哦2.jpg
  10. E:\a\b\e\c.jpg
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP