More on REs ... -- www.macfh.co.uk/MacFH.html > > would we both agree with?: > > \b[bpw][0-9][a-z0-9]{7,13}\b > > I think it's > > \b[bpw]\d[b-df-hj-np-tv-z\d]{6,13}\b > > to cover the existing ones that are eight long, up to the 15-long > w172vg029mkl852 that Vangelis mentioned. And we may as well > borrow from > the specification and cut out the vowels rather than allow a-z.
Yes, I agree. I see that my 7 at the end was an actual error, but for the rest of it you're saving some characters in capturing the second character, and you're being more precise in the tail. I think your suggestion should work well, and am happy to agree with it. > I'd probably put all of it other than the two `\b' into a > variable with > qr//, and then embed that in regexps as needed, adding `()', or `\b', > etc., back. ... where and as needed. Yes, a sensible approach. > Out of interest, I've looked at 3.01's get_iplayer for "]0" to see how > it already uses it. > > 941 if ( $this->{pid} !~ m{^([pb]0[a-z0-9]{6})$} ) { > > $1 doesn't seem to be used afterwards, so the `()' aren't needed. > > 3359 if ( $prog->{pid} =~ > m{^http.+\/([pb]0[a-z0-9]{6})\/?.*$} ) { > > The `/' are unnecessarily backslashed given that m{} is used > so the `/' > doesn't have special meaning. The `.+' means the last thing to match > the PID RE is used. The `/?' makes the terminating slash > optional, but > this means "http://.../p0abc123def" matches, but $1 ignores the "def". > The `.*$' isn't wanted as it's always true. > > 4409 $pid = $1 if $prog->{pid} =~ > /\/([bp]0[a-z0-9]{6})/ > > This time the first PID-like thing would be used. Again, a > "def" would > be ignored. > > 4416 if ( $pid !~ /^[bp]0[a-z0-9]{6}$/ ) { > 4521 if ( $pid !~ /^[bp]0[a-z0-9]{6}$/ && $pid !~ > /^http/ ) { > 4531 if ( $pid =~ /^[bp]0[a-z0-9]{6}$/ ) { > 4603 if ( $pid =~ /^[bp]0[a-z0-9]{6}$/ ) { > 4686 } elsif ( $prog->{pid} =~ /^[bp]0[a-z0-9]{6}$/ ) { > > All the same. Fine. > > 5095 if ( $prog->{pid} !~ m{^([pb]0[a-z0-9]{6})$} ) { > > "pb" rather than "bp", just for spice. No need to capture. > > 5253 return $1 if $_[0] =~ m{/?([wpb]0[a-z0-9]{6})}; > > This one has a `w'! I would cry out "Gawdon Bennet!", but he wouldn't hear me from shaking his head in disbelief. Even after Martin Clark's post giving a tally of them all, the full horror of it doesn't really sink in until you see them all listed together as you have done. It really is a classic example of the need to declare a multiply-used value up front at the top of the programme as a constant or variable, and why this need is the very first item in my programming check-list! _______________________________________________ get_iplayer mailing list get_iplayer@lists.infradead.org http://lists.infradead.org/mailman/listinfo/get_iplayer