在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2736|回复: 5

[求助] 【perl】在网上看的一个统计文本中字符的个数的脚本

[复制链接]
发表于 2017-3-2 09:33:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x

#!/usr/bin/perl -w
open (HFile,"/usr/develop-program/conf.txt") || die "Open error $!";   # 打开固定路径文本,文本中字符以标点符号,空格隔开
@file=<HFile>;    #将文本中文件读入到数组中
chomp @file;      
close (HFile);   
foreach $_ (@file)  
{
    while(/([/w]+-?[/w]*)[/s| , | . | ! ]/g)   前面的
([/w]+-?[/w]*),[/w]+是匹配[^a-zA-Z]+ ?

只知道后面[/s| , | . | ! ]是匹配空格 ,. !但是改成[/s—+| , | . | ! ]可以匹配多个空格啊?

    {   
   
        $Word{$1}++;      怎么突然冒出来一个$1
    }
}
foreach $hash (keys %Word)
{
    print "$hash occures $Word{$hash} times/n";
}

求大神解释一下,谢谢。

 楼主| 发表于 2017-3-2 09:50:47 | 显示全部楼层
这个程序有问题,我在linux中运行的时候,报错了
发表于 2017-3-2 11:44:55 | 显示全部楼层
回复 2# hlr1993


    $1是这个括号里面匹配到的内容:([/w]+-?[/w]*)
    第一个括号内匹配到的内容自动赋值给$1,第二个括号内匹配到的内容自动赋值给$2,依次类推。
发表于 2017-3-2 14:10:10 | 显示全部楼层
1. ([/w]+-?[/w]*)里面的[/w]的意思大概是\w,不需要加[]就可以,\w包括'a-zA-Z0-9_'。

2. [/s| , | . | ! ]里面的/s应该是\s才对,而且,.!前后的空格如果需要一定要匹配的话也用\s*会比较好,如果想忽略空格的话需要/x。

3. [/s—+| , | . | ! ]改成这样应该不能匹配空格了,匹配项后面只有?+*,?是0或1个,+是1或多个,*是0或多个,范围不同。

4. 楼上正解。

综上,程序里的正则应该是




  1. /(\w+     #匹配第一段单词
  2.   -?         #匹配可能存在的'-'
  3.    \w*)    #匹配第二段单词
  4.   (?:\s*,| #匹配','
  5.    \s*.|    #匹配'.'
  6.    \s*!|    #匹配'!'
  7.    \s*)/gx#匹配'空格'


复制代码
发表于 2017-7-21 14:39:34 | 显示全部楼层
这个程序前面读入文件的地方改成逐行读入比较好,如果你的输入文件很大就不和谐了。
个人见解哈。
发表于 2017-8-8 19:19:26 | 显示全部楼层
回复 5# liangxu1986


    逐行读入耗cpu,一次读入耗内存。觉得只要文件不超过内存还是一次读入好。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-19 04:08 , Processed in 0.018311 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表