use warnings;
use strict;
my $string = 'blah/blah/blah#ThisIsWhatIWant?ButNotThisEtc';
if( $string =~ m/#([^?]*)/ )
{
print "matched -->$1<--\n";
}
####
matched -->ThisIsWhatIWant<--
####
use YAPE::Regex::Explain;
my $re = qr/#([^?]*)/;
my $p = YAPE::Regex::Explain->new($re)->explain;
print "$p\n";
####
The regular expression:
(?-imsx:#([^?]*))
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
# '#'
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
[^?]* any character except: '?' (0 or more
times (matching the most amount
possible))
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------