Select the anchor options, will automatically put '^' or '$' or '^$'. you're allowed to put only once per regex string (that's the regex rule, isn't it?).
But there's a few bugs i.e. if you create sub regex, you can create something absurd like this ' /^item(^duhduh$) foo$/'. i'm still looking into it. sorry for that.
(i hold this quote for a while...)
| [reply] |
Just for your interest:
Multiple ^ or $ anchors would be legal.
The /m modifier in combination with the /s modifier would match the intended behaviour.
/m: match over multiple lines
/s: . matches everything (even newlines)
Note that you would have to insert code to match any newline either by . or by \s. See example below.
my $text = <<"END";
a sample line
item
duhduh
foo
END
$text =~ /^item.*(^duhduh$)\s*foo$/sm;
print "\$1: '$1'\n"; # prints "$1: 'duhduh'"
| [reply] [d/l] |
Just a point here - something I finally got only after a number of rereadings of the section in J. Friedl's excellent Mastering Regular Expressions (O'Reilly) the /m and /s are a little more complicated.
/m: better remembered as 'multi' mode - affects 'multiple' (2) meta chars, the anchors (^ and $)
/s: 'single' mode - affects one meta char, the dot '.'
/s changes the dot's normal definition - match any char except a new line (\n).
In single mode the dot can match \n too which allows regex phrases like:
.*
to match across the end of line. That all it does and so its why the "item.*" in your example matches the end of line.
/m changes the ^ and $ anchors from absolute beginning and end of string to match beginning and end of a line, as marked by new line chars. Which is useful w/ the '/g' option, for example:
local $/ = undef;
my $whole_file = <>; # slurp
while ( $whole_file =~ /^(.*)$/mg ) {
# process line by line
print "Got: $1\n";
}
Not a useful snippet but ... two notes - the '\n' on the print stmt and notice the diff if you put an 's' in the match options
| [reply] [d/l] |
| [reply] |
Uncheck the 'Begin of word' 'End of word' (last column). This is the option for word boundry. While the string boundry /line boundry set using the anchor option..
| [reply] |