0

私の文字列は次のとおりです: (いくつかのテキストの後に続く) User 'Mr.G@rr!s0n' is the admin . 私はこの正規表現パターンを使用しています:/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";
}
4

3 に答える 3

2

Perlを使用していますか?その場合、部分文字列の@rr一部を空の文字列に補間できます (「rr」という名前の配列がない場合)。どういうわけか @ をエスケープする必要がありますか?

于 2012-06-25T17:44:22.537 に答える
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()

もう 1 つの可能性は、何らかの評価でマッチを使用しているということですが、それはばかげています。したがって、そこで推測するつもりはありません。

于 2012-06-25T18:24:30.377 に答える
0

正規表現エンジンが肯定的な後読みをサポートしている場合は、次のようなことを試すことができます。

正規表現(?<=User ').*(?=')

マッチMr.G@rr!s0n

文字列でUser 'Mr.G@rr!s0n' is the admin

于 2012-06-25T17:22:45.627 に答える