Well, clearly I'm an idiot. I thought I'd drop a mention of YAPE::Regex::Explain to show how to figure out what a regular expression is saying, so I could point out the "invented" bit. But I find that the bit I thought was "invented" seems fine. Sorry about that. When I run:
use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new(qr/(.*)(_\d{11,}?.*)(\.\w+)/)->explain
+();
I get:
And I thought the \d{11,}? was the invented bit. I'll have to play with that sometime.
...roboticus
When your only tool is a hammer, all problems look like your thumb. | [reply] [d/l] [select] |
And I thought the \d{11,}? was the invented bit. I'll have to play with that sometime.
You should, the future of all new perl regex features rests upon that syntax
| [reply] |
I don't see the relation between your link and that bit of the regex. However, that said, your skepticism of its utility seems justified. I tried to find a use for it, but I haven't been able to make \d{4,}? act any differently than \d{4}. It's either a useless construct, or a failure of my imagination in coming up with an appropriate test case.
Putting aside what YAPE::Regex::Explain says about it, when I looked at it originally, I thought "Yack! Perl is gonna bitch about that weird '?' character". I could think of a couple other interpretations, so I put together a bit of code to check 'em out:
my @tests = (
'First case',
'123456789second & third case',
);
for my $t (@tests) {
print "\nchecking '$t'\n";
+
if ($t=~/(\d{4,}?)(.*)/) { print "A: $1, $2\n"; }
if ($t=~/(\d{4,}?)(.*?)$/) { print "B: $1, $2\n"; }
}
The other interpretations I could think of were:
An optional set of 4 or more digits, kind of like (?:\d{4,})?. If true, the first case would give us:
A: , First case'
Exactly 4 digits, like \d{4}, giving us:
checking '123456789second & third case'
A: 1234, 56789second & third case
B: 1234, 56789second & third case
4 or more digits, with as few as possible, yielding:
checking '123456789second & third case'
A: 1234, 56789second & third case
B: 123456789, second & third case
On reading the ...explain() output, I thought that I could perhaps make the third case come about. But what I actually got was:
$ perl xxxyyyzzz.pl
checking 'First case'
checking '123456789second & third case'
A: 1234, 56789second & third case
B: 1234, 56789second & third case
So I'm thinking that my initial surprise was justified, even though it's syntactically correct.
...roboticus
When your only tool is a hammer, all problems look like your thumb. | [reply] [d/l] [select] |