Perl Regular Expression - What does gc modifier means?

后端 未结 2 1365
佛祖请我去吃肉
佛祖请我去吃肉 2021-02-07 02:50

I have a regex which matches some text as:

$text =~ m/$regex/gcxs

Now I want to know what \'gc\' modifier means:

I hav

相关标签:
2条回答
  • 2021-02-07 03:04

    In the perldoc perlre http://perldoc.perl.org/perlre.html#Modifiers

    Global matching, and keep the Current position after failed matching. Unlike i, m, s and x, these two flags affect the way the regex is used rather than the regex itself. See Using regular expressions in Perl in perlretut for further explanation of the g and c modifiers.

    The specified ref leads to:

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

    This URI has a sub-section entitled, 'Global matching' which contains a small tutorial/working example, including:

    A failed match or changing the target string resets the position. If you don't want the position reset after failure to match, add the //c , as in /regexp/gc . The current position in the string is associated with the string, not the regexp. This means that different strings have different positions and their respective positions can be set or read independently.

    HTH Lee

    0 讨论(0)
  • 2021-02-07 03:10

    The /g modifier is used to remember the "position in a string" so you can incrementally process a string. e.g.

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

    Because the position is reset on a failed match, the above will output

    abcabc3de
    

    The /c flag does not reset the position on a failed match. So if we add /c to the first regex like so

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

    We end up with

    abc3de
    

    Sample code: http://ideone.com/cC9wb

    0 讨论(0)
提交回复
热议问题