免费注册 查看新帖 |

Chinaunix

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

【泣血求助】[^.]或者[^-][^.-][^\.-]都不行!我想匹配除负号和小数点外的数字 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-14 21:34 |只看该作者 |倒序浏览
本帖最后由 clysdym 于 2015-05-14 21:38 编辑

比如一个数:-2.978ab%¥445
我的命令式 if ($input =~ m/\D[^.-]/) {
   print "it is a illegal number"
}

请教大家 [^]的功能不就是“除了方括号里面的内容之外”的意思吗?为什么我换了[^-\.][^.][^-][^.-][^\.-]等等都不行呢?
在线等,拜谢··(我用的是perl)

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2015-05-14 21:59 |只看该作者
回复 1# clysdym

which number you want

$ echo "-2.978ab%¥445" | perl -lane 'print join",",split/[^\d.-]+/'
-2.978,445

   

论坛徽章:
0
3 [报告]
发表于 2015-05-14 22:29 |只看该作者
回复 2# jason680


    不是……我不想抽提里面的数字,我只是想验证:输入一个数字,经过这个程序,如果数字里面含有字母之类的……那就输出“输入不正确”。
我用的perl写的,但是程序执行时总是达不到目标;比如我输入3.1,那么因为里面的小数点不是数字型,所以用正则表达式\D匹配时要将其排除掉,但是总是排除失败,你可以复制下来试试。。。。。

论坛徽章:
0
4 [报告]
发表于 2015-05-14 23:45 |只看该作者
echo ".31" | perl -lane 'if(m/\D/){print "it is a illegal number";}'   

是这个意思吗  出现了数字之外的就打印不合法字符

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
5 [报告]
发表于 2015-05-15 00:53 |只看该作者
kanbudong  
  1. [ -2.978ab%¥445 ]      it is a illegal number
  2. [ -5 ]  it is a illegal number
  3. [ .5 ]  it is a illegal number
  4. [ 10,000 ]      it is a illegal number
  5. [ a. ]  it is a number
  6. [ 12..--- ]     it is a number
  7. [ -0.12 ]       it is a illegal number
  8. [ 34.. ]        it is a number
  9. [ 12a ] it is a number
  10. [ 3.1 ] it is a illegal number
复制代码
what is this?
除负号和小数点外的数字
shi include haishi exclude?

  • +int
  • +-float, and +-int

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
6 [报告]
发表于 2015-05-15 01:29 |只看该作者
平时用 Scalar::Util::looks_like_number 就行了,它认 Perl 中的数字语法加上 'Infinity'/'+Infinity'/'-Infinity',如果要求很严格那用模块 Regexp::Common

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
7 [报告]
发表于 2015-05-15 07:19 |只看该作者
你的代码的问题是没有加锚定符号:
  1. /^\D/
复制代码

论坛徽章:
0
8 [报告]
发表于 2015-05-15 18:41 |只看该作者
回复 3# clysdym
  1. use strict;
  2. use warnings;

  3. use Scalar::Util qw(looks_like_number);

  4. my $input = <STDIN>;
  5. chomp $input;

  6. if (looks_like_number($input)) {
  7.     print "it's number\n";
  8. } else {
  9.     print "it isn't  number\n";
  10. }
复制代码

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
9 [报告]
发表于 2015-05-19 11:41 |只看该作者
本帖最后由 104359176 于 2015-05-19 11:42 编辑

Perl 5 不分数字和字符串,数据类型只有引用(标量,数组,哈希,对象)和非引用,至于值的类型,通常是通过正则表达式来对字符串化的值进行匹配,这很不方便。Perl 6 彻底解决了这个问题:
  1.    my $int = 1;
  2.    $int ~~ Int;

  3.     my $str = 'hello';
  4.     $str ~~ Str;
复制代码
这样即使想编写类型系统和 C 一样严格的代码,也成为可能。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
10 [报告]
发表于 2016-09-19 10:46 |只看该作者
  1. print "It's illegal number!\n" if ($input =~ /\A(?:[+-])?.*?[^.\d]/);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP