免费注册 查看新帖 |

Chinaunix

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

perl中如何匹配行开头的全角数字 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-10 10:36 |只看该作者 |倒序浏览
#!/usr/bin/perl -w
use JSON qw(to_json);
use strict;
my @string=(1);


foreach (<>){
        #next if ($_ =~ /(^\d{2,}|^[0123456789]{2,})/);
        if ( $_ =~ /^[0-90123456789]\.(.*)(\r\n|\n)/){        #不能匹配全角数字
                push @string,$1;
        }else{
                $_ =~ s/\s//g;
                $string[$#string]=$string[$#string] . $_;
        }
}
shift @string;

my $json_text=to_json(\@string);
print $json_text;


目的是想匹配行开头的单个数字或全角数字,然后转换成json。if ( $_ =~ /^[0-90123456789]\.(.*)(\r\n|\n)/)中如果不加^可以匹配全角数字,但是是多位的数字而需求只允许1.这种形式的。
请教一下是什么原因^后面不能跟全角数字匹配吗

论坛徽章:
0
2 [报告]
发表于 2013-07-10 14:04 |只看该作者
没有人碰到过同样的问题吗,自己先顶一个。

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
3 [报告]
发表于 2013-07-10 14:23 |只看该作者
根据你说东西做了一个测试,看下图。
直接在脚本中定义全角字符是可以识别的,但是在命令行收入就不能识别
这因该和脚本编辑器和cmd命令行编辑器的字符编码有关系吧!

论坛徽章:
0
4 [报告]
发表于 2013-07-10 14:32 |只看该作者
本帖最后由 黑色阳光_cu 于 2013-07-10 14:33 编辑

全角字符是多个byte的,你不能在字符集里用,除非 UTF8 标记打开了,或者这样子写:


  1. /^(?:[0-9]|0|1|2|3|4|5|6|7|8|9)\.(.*)(\r\n|\n)/
复制代码

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
5 [报告]
发表于 2013-07-10 14:39 |只看该作者
回复 4# 黑色阳光_cu


    [0|1|2|3|4|5|6|7|8|9]
这样写也不行

论坛徽章:
0
6 [报告]
发表于 2013-07-10 15:13 |只看该作者
最后我改了一下,达到我的目地:
#!/usr/bin/perl -w
#将文件中数字0-9或全角数字0-9加逗号的数字转换成json格式
use JSON qw(to_json);
use strict;
my @string=(1);


foreach (<>){
        next if ($_ =~ /^([0-9]|0|1|2|3|4|5|6|7|8|9){2,}/);
        if ( $_ =~ /^([0-9]|0|1|2|3|4|5|6|7|8|9)(.)(.*)(\r\n|\n)/){
                push @string,$3;
        }else{
                $_ =~ s/\s//g;
                $string[$#string]=$string[$#string] . $_;    #如果不匹配则把数据拼到上一个匹配行的末尾
        }
}
shift @string;

my $json_text=to_json(\@string);
print $json_text;


__DATA__
2.美国
3.日本
4.德国
25.中国

绿卡松岛枫松岛枫

5.我是谁,;。
ads
8.
阿什顿看风景啊

论坛徽章:
0
7 [报告]
发表于 2013-07-10 15:15 |只看该作者
但是不清楚为什么^([0-9]|0|1|2|3|4|5|6|7|8|9)这样写可以,^[0-90123456789]这样写不行.是对字节的关系吗
sinian126 该用户已被删除
8 [报告]
发表于 2013-07-10 19:17 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
9 [报告]
发表于 2013-07-10 19:43 |只看该作者
啥叫全角数字

论坛徽章:
220
未羊
日期:2015-01-30 17:38:21未羊
日期:2015-01-30 17:38:26未羊
日期:2015-01-30 17:38:32未羊
日期:2015-01-30 17:38:38未羊
日期:2015-01-30 17:43:55白羊座
日期:2015-02-10 09:25:23白羊座
日期:2015-02-10 09:25:23白羊座
日期:2015-02-10 09:25:23白羊座
日期:2015-02-10 09:25:23白羊座
日期:2015-02-10 09:25:23羊年新春福章
日期:2015-03-04 15:12:552015年迎新春徽章
日期:2015-03-04 15:13:09
10 [报告]
发表于 2013-07-11 09:44 |只看该作者
坐看各位的回答!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP