我的字符串是:(后面跟着一些文字)用户'Mr.G@rr!s0n'是管理员。
我正在使用这个正则表达式模式:/user\s'(.*)'\sis/i
但是,我的输出为 Mr.G!s0n
我的正则表达式模式到底需要改变什么?
以下是代码段:
$text1 = "user 'Mr.G@rr!s0n' is the admin";
if($text1 =~ /user\s'(.*)'\sis/i)
{
print "\n";
print "Password: ".$1;
print "\n";
}
答案 0 :(得分:2)
您使用的是Perl吗?如果是这样,子字符串的@rr
部分可以插入到空字符串中(假设您没有名为“rr”的数组)。你需要以某种方式逃脱吗?
答案 1 :(得分:2)
我猜你的代码(由于某些原因你不会显示)是这样的:
my $str = "(some text followed by) User 'Mr.G@rr!s0n' is the admin";
if ($str =~ /user\s'(.*)'\sis/i) {
print "$1\n";
}
这里的问题是@rr
是插值的,因为你使用的是双引号字符串。因为你显然没有使用:
use strict;
use warnings;
..这个错误是沉默的。如果你曾经使用它们,你会得到:
Possible unintended interpolation of @rr in string at
Global symbol "@rr" requires explicit package name at
要解决此问题,请使用''
或q()
单引号字符串:
my $str = q#(some text followed by) User 'Mr.G@rr!s0n' is the admin#;
正如您所注意到的,我使用#
作为q()
的分隔符,因为单引号和括号都已经在字符串中。
另一种可能性是你在某种评价中使用了你的比赛,但这很愚蠢。所以我不打算在那里猜测。
答案 2 :(得分:0)
如果你的正则表达式引擎支持积极的外观,你可以尝试这样的事情:
正则表达式(?<=User ').*(?=')
匹配Mr.G@rr!s0n
User 'Mr.G@rr!s0n' is the admin
中的