【发布时间】:2018-08-08 03:09:33
【问题描述】:
我正在使用 perl 将密码与 bash 脚本中的正则表达式进行匹配。
在测试密码的正则表达式时,我遇到了这个问题:
这行得通:
perl -e 'if ( "Bomba\@2071" =~ /^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z].*[a-z].*[a-z]).{8,}$/ ) { print 1; } '
虽然这永远不会匹配:
perl -e 'if ( "Bomba@2071" =~ /^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z].*[a-z].*[a-z]).{8,}$/ ) { print 1; } '
如您所见,它之所以有效,是因为我转义了 @ 符号。我从来没有在其他编程语言中看到过这样的事情,在被这个问题困扰了一个多小时后,我偶然发现了原因。
所以,我的问题是,这里发生了什么?为什么我需要转义像@这样的奇怪字符?
【问题讨论】:
-
use strict;或use warnings;中的任何一个都会告诉您问题所在。