Arran Cudbard-Bell <a.cudbardb@freeradius.org> writes:
Yes indeed, he refused to add it. I our case I managed to overcome the problem by defining a slightly different regex. It is true that the info I 'd like to extract is only 5 variables (fitting in the 8) but more groups can be needed in more compicated expressions. In our case the original regex was
/.*_((HUA)|(ALU))_([[:digit:]]+)(.*)? ((atm)|(eth)) ([[:digit:]]+)\/([[:digit:]]+)\/([[:digit:]]+)\/([[:digit:]]+) (:)?.*/
and I reduced the groups with
/.*__([[:digit:]]+)(.*)? [atmeth]{3} 0?([[:digit:]]+)\/0? ([[:digit:]]+)\/0?([[:digit:]]+)\/0?([[:digit:]]+)(:)?.*/)
Not exactly the same but fits our purposes fine.
[HUAALU]{3}
That'll work, but it's pretty bad.
Yes, I know.
((HUA)|(ALU))
Inputting (ALU|HUA) on debuggex, you get:
*
Meaning HUA and ALU count as atoms for the alternation. In fact (HUA|ALU) is exactly the same thing as ((HUA)|(ALU)) but uses two fewer capture groups.
This is very nice.
I can't remember if it's the same in extended regular expressions but for PCRE at least
(?:<expression>) makes expression an atom, but doesn't add the match to the capture groups.
'foo bar baz' =~ /([[:alnum:]]+) (?:[[:alnum:]]+) ([[:alnum:]]+)/
Would result in
%{0} -> 'foo bar baz' %{1} -> 'foo' %{2} -> 'baz'
So you don't waste the capture groups if you're not actually going to use the data.
Very useful, but unfortunately only available in pcre it seems.
Try it with extended regular expressions and see if it works. If it doesn't the only way to fix it would be upgrade to v3.0.x and build with PCRE unfortunately.
OK.
I think generally this is the way to go, have it configurable since people can use it. Matching multiple times to reduce the number of groups is at least "not elegant". Maybe you can have it in the v3.x.x branch?
Yes, i'll have a look.
Thanks, although in my case the problem is overcome. Latest version of regex for my case: /.*_(HUA|ALU)_([[:digit:]]+)(.*)? (atm|eth) 0?([[:digit:]]+)\/0?([[:digit:]]+)\/0?([[:digit:]]+)\/0?([[:digit:]]+)(:)?.*/ which gives me the result in exactly 8 groups.
Yes, I know what ISPs can be like :)
Then you are in the group of people who understand ;-) Thank you and keep up the good work. Regards, Kostas