免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: hztj2005

哪位朋友有检查汉字数字合法的正则表达式 [复制链接]

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
发表于 2016-07-22 03:01 |显示全部楼层
万万,  万亿 常用但不是标准用法。需要换成亿,兆,京。。。
中文数字式4位一截的

论坛徽章:
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
发表于 2016-07-22 08:27 |显示全部楼层
回复 7# hztj2005

variable

1. $var

2. ${var}
   

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2016-07-22 16:33 |显示全部楼层
回复 11# RE_HASH


    谁能将标准描述出来,答案也就差不多了。

论坛徽章:
0
发表于 2016-07-24 14:57 |显示全部楼层
谢谢各位朋友,这两天试着从Cygwin转到Activeperl,还不是适应,过几天测试了再回复各位。

综合上面帖子的思路:
1、先去掉“百分比”三个字。
2、把小数点部分去掉单独检查,小数点后是纯一二三四五六七八九零,容易处理。
3,再写一个万以下的正则表达式。就是:三千六百七十二、九千零二十、八千零三、八千、五百三十五、五百零六、五百、九十五、六十、八。
$num= "一二三四五六七八九";
$base = ([$num]千)?([$num]百)?([$num]十)?([$num])? #这里中间是零时就复杂了。看来得用条件才能解决

4.万以上的按规则就是$base亿$base万$base


求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2016-07-24 16:19 |显示全部楼层
本帖最后由 104359176 于 2016-07-24 16:20 编辑

这是以千开始的数字:
  1. my $nums = "一二三四五六七八九“;
  2. my $base = /
  3. [$nums]千[$nums]百[$nums]十[$nums] |
  4. [$nums]千零[$nums]十[$nums] |
  5. [$nums]千[$nums]百零[$nums] |
  6. [$nums]千[$nums]百[$nums]十 |
  7. [$nums]千[$nums]百 |
  8. [$nums]千零[$nums]十|
  9. [$nums]千零[$nums] |
  10. [$nums]千
  11. /;
复制代码
以百开始的少些,以万开始的就更多了,排列组合的话,光写这些代码就要很长。

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2016-07-24 16:23 |显示全部楼层
Perl5 的正则中只能插入字符串,无法插入正则表达式本身,这让写这种嵌套包含的正则变得复杂。

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2016-07-24 21:51 |显示全部楼层
本帖最后由 104359176 于 2016-07-24 22:10 编辑
  1. (grammar CN-NUMS)
  2. (my CN-NUMS / ^ <exprs> $/)
  3. (my exprs /
  4.          | <wbase> # 10k
  5.          | <tbase>   # throusand
  6.          | <hbase>  # hundred
  7.          | <sbase>   # ten
  8.          | <base>     # single
  9.     /)
  10. (my base     / [123456789]/)
  11. (my sbase   /<base>A<base>?/)
  12. (my hbase  /<base>B<sbase>? | <base>B0<base>/)
  13. (my tbase   / <base>C<hbase>? | <base>C0<sbase>? | <base>C0<base>?/)
  14. (my wbase  /
  15.                | ( <base>D<tbase>? | <base>D0<hbase>?|<base>D0<sbase>? |<base>D0<base>? )
  16.                | ( <sbase>D<tbase>?|<sbase>D0<hbase>? |<sbase>D0<sbase>?|<sbase>D0<base>?)
  17.                | ( <hbase>D<tbase>?| <hbase>D0<hbase>?|<hbase>D0<sbase>? |<hbase>D0<base>?)
  18.                | ( <tbase>D<tbase>?| <tbase>D0<hbase>? | <tbase>D0<sbase>? | <tbase>D0 <base>?)
  19. /)
  20. # A -> 10
  21. # B -> 100
  22. # C -> 1000
  23. # D-> 1w
  24. # repalce all CN-NUM to EN-NUM FIRST
  25. (if (str ~~ CN-NUMS) (say "match") else (say "reject"))
复制代码
万以下只要匹配这个语法就好了。

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2016-07-24 21:53 |显示全部楼层
本帖最后由 104359176 于 2016-07-24 22:11 编辑

这个代码不是 Perl6, 而是 Spp, 一种专门解析语言的语言。 以上这个语法,大概内部有近百个分支,如果是匹配带亿的,就更多了。所以,用普通正则描述,根本就是一项体力活。

论坛徽章:
0
发表于 2016-08-02 14:59 |显示全部楼层
回复 18# 104359176

谢谢!看来是要用代码解决,不能单靠正则表达式。



   

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2016-08-02 20:14 |显示全部楼层
这样的问题,如果用匹配一个模式的思路解决,那么你的设计语言如果不支持语法描述,那么就是一项苦力活。

你要换一个思路来解决:你可以将汉字数字转换成对应的真正的数字,然后让系统自动判断数字是否合法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP