Perl Regular Expression - What does gc modifier means?

馋奶兔 提交于 2020-01-01 01:57:26

问题


I have a regex which matches some text as:

$text =~ m/$regex/gcxs

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

I have searched and found that gc means "Allow continued search after failed /g match".

This is not clear to me. What does continued search means?

As far as I have understood, it means that start matching at the beginning if the /g search fails. But doesn't /g modififier matches the whole string?


回答1:


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




回答2:


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



来源:https://stackoverflow.com/questions/11395395/perl-regular-expression-what-does-gc-modifier-means

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!