Perl regexps不匹配字符串与前导零/错误转义的数字与Perl命令行
发布时间:2020-12-15 23:23:59 所属栏目:大数据 来源:网络整理
导读:我已经更新了这个问题,因为在最初的问题中,我追逐的问题竟然是一个完全不同的错误(在这种情况下并不感兴趣).但是我在测试中遇到的二阶错误是其他人可能遇到的问题并且产生了一个非常有趣的答案的答案,所以我将这里作为一个问题留在这里. 我试图通过正则表达
我已经更新了这个问题,因为在最初的问题中,我追逐的问题竟然是一个完全不同的错误(在这种情况下并不感兴趣).但是我在测试中遇到的二阶错误是其他人可能遇到的问题并且产生了一个非常有趣的答案的答案,所以我将这里作为一个问题留在这里.
我试图通过正则表达式追踪一个问题,因为前导零点似乎不匹配.我发现以下所有正则表达式在我的命令行测试中都不匹配: "005630" =~ /^0056(10|11|15|20|21|25|30|31)$/ "005630" =~ /0056(10|11|15|20|21|25|30|31)/ "005630" =~ /56(10|11|15|20|21|25|30|31)/ "005630" =~ /..56(10|11|15|20|21|25|30|31)/ "005630" =~ /..5630/ "005630" =~ /005630/ "005630" =~ /^005630$/ "005630" =~ /5630/ "005630" =~ /(0)*5630/ "005630" =~ /5630/g "005630" =~ m/5630/g 这确实匹配: "x005630" =~ /0056(10|11|15|20|21|25|30|31)/ 与其他人相似,即一旦我添加了一封主要信件,它就有效. 测试代码是(在Cygwin bash上使用Cygwin Perl v5.10.1进行测试): perl -e "print ( "005630" =~ /0056(10|11|15|20|21|25|30|31)/)" # does not display a true value perl -e "print ( "x005630" =~ /0056(10|11|15|20|21|25|30|31)/)" # displays a true value 这里的引用显然是一个错误(不能在带引号的字符串中使用未转义的“).但我仍然不明白为什么尽管报价不正确,第二行仍然有效. 注意:这也可能在没有正则表达式的其他情况下发生. 解决方法
给出命令的原因
perl -e "print ( "005630" =~ /0056(10|11|15|20|21|25|30|31)/)" perl -e "print ( "x005630" =~ /0056(10|11|15|20|21|25|30|31)/)" 只有第二行打印匹配是Perl支持octal numeric literals.正如你想的那样,你的shell正在吃引号,所以你实际上是在执行语句: print ( 005630 =~ /0056(10|11|15|20|21|25|30|31)/); print ( x005630 =~ /0056(10|11|15|20|21|25|30|31)/); 任何以零点开头的数字文字(不带引号的数字)都不会立即跟随小数点,将其视为八进制数字. perl -e "print 005630 . ''" # prints 2968 perl -e "print x005630 . ''" # prints x005630 (此处需要.”以确保将裸字视为字符串.=?运算符在您的示例中执行此操作.) 所以你的正则表达式不匹配的原因是你的字符串不包含你的想法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Django 系列博客(二)
- delphi xe5 android 开发实现手机打电话和发短信
- 【数位DP】HDU3565-Bi-peak Number
- The first image of strawberry perl
- CHOJ# 在线编译及评判系统(OnlineJudge)2.0 Beta2 on Azu
- [VB.NET]请问如何能得到应用程序的发布版本号?(注意不是程
- 501. Find Mode in Binary Search Tree
- 在golang中的一个sql事务中的批量提升
- perl中字符串比较
- delphi – 使用TAmazonStorageService.UploadObject将Conte