Perl regexps不匹配字符串与前导零错误转义的数字与Perl命令行中的前导零

Perl regexps不匹配字符串与前导零错误转义的数字与Perl命令行中的前导零,第1张

概述我已经更新了这个问题,因为在最初的问题中,我追逐的问题竟然是一个完全不同的错误(在这种情况下并不感兴趣).但是我在测试中遇到的二阶错误是其他人可能遇到的问题并且产生了一个非常有趣的答案的答案,所以我将这里作为一个问题留在这里. 我试图通过正则表达式追踪一个问题,因为前导零点似乎不匹配.我发现以下所有正则表达式在我的命令行测试中都不匹配: "005630" =~ /^0056(10|11|15|20 我已经更新了这个问题,因为在最初的问题中,我追逐的问题竟然是一个完全不同的错误(在这种情况下并不感兴趣).但是我在测试中遇到的二阶错误是其他人可能遇到的问题并且产生了一个非常有趣的答案的答案,所以我将这里作为一个问题留在这里.

我试图通过正则表达式追踪一个问题,因为前导零点似乎不匹配.我发现以下所有正则表达式在我的命令行测试中都不匹配:

"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 valueperl -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 2968perl -e "print x005630 . ''" # prints x005630

(此处需要.”以确保将裸字视为字符串.=〜运算符在您的示例中执行此 *** 作.)

所以你的正则表达式不匹配的原因是你的字符串不包含你的想法.

总结

以上是内存溢出为你收集整理的Perl regexps不匹配字符串与前导零/错误转义的数字与Perl命令行中的前导零全部内容,希望文章能够帮你解决Perl regexps不匹配字符串与前导零/错误转义的数字与Perl命令行中的前导零所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1265804.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存