21

次のようなテキストに一致する正規表現があります。

$text =~ m/$regex/gcxs

「gc」修飾子の意味を知りたい:

検索したところ、gc「/g の一致に失敗した後も引き続き検索を許可する」という意味であることがわかりました。

これは私にはわかりません。探し続ける とはどういう意味ですか?

私が理解している限りでは、/g検索が失敗した場合は最初からマッチングを開始するということです。しかし、 /g修飾子は文字列全体に一致しませんか?

4

2 に答える 2

33

修飾子は「/g文字列内の位置」を記憶するために使用されるため、文字列を段階的に処理できます。例えば

my $txt = "abc3de";
while( $txt =~ /\G[a-z]/g )
{
    print "$&";
}
while( $txt =~ /\G./g )
{
    print "$&";
}

マッチに失敗すると位置がリセットされるため、上記は出力されます

abcabc3de

フラグは、失敗した一致の/c位置をリセットしません。したがって/c、最初の正規表現に次のように追加すると

my $txt = "abc3de";
while( $txt =~ /\G[a-z]/gc )
{
    print "$&";
}
while( $txt =~ /\G./g )
{
    print "$&";
}

最終的には

abc3de

サンプルコード: http://ideone.com/cC9wb

于 2012-07-09T13:08:12.960 に答える
3

perldocでperlrehttp ://perldoc.perl.org/perlre.html#Modifiers

グローバルマッチング、およびマッチングに失敗した後も現在の位置を保持します。i、m、s、およびxとは異なり、これら2つのフラグは、正規表現自体ではなく、正規表現の使用方法に影響を与えます。gおよびc修飾子の詳細については、perlretutのPerlでの正規表現の使用を参照してください。

指定された参照は次のようになります。

http://perldoc.perl.org/perlretut.html#Using-regular-expressions-in-Perl

このURIには、「グローバルマッチング」というタイトルのサブセクションがあり、次のような小さなチュートリアル/作業例が含まれています。

一致に失敗するか、ターゲット文字列を変更すると、位置がリセットされます。一致しなかった後に位置をリセットしたくない場合は、/ regexp/gcのように//cを追加します。文字列内の現在の位置は、正規表現ではなく文字列に関連付けられています。これは、異なる文字列には異なる位置があり、それぞれの位置を個別に設定または読み取ることができることを意味します。

HTHリー

于 2012-07-09T13:10:20.477 に答える