Regex Split on forward slash?
Phil Mayers
p.mayers at imperial.ac.uk
Tue Dec 17 12:46:52 CET 2013
On 17/12/13 03:18, Peter Lambrechtsen wrote:
>
> Essentially I am trying to do a split on the ADSL Circuit ID:
>
> ADSL-Agent-Circuit-Id = "POLT01 eth 1/1/02/05/4/14/1:10"
>
> And trying to grab the value in the 6th split being "14" and check it's
> a 14.
>
> I would have hoped something like this regex would work:
>
> /(?<=\/)([\w-]*)(?=\/)/
Few things:
1. This looks like a PCRE regexp; are you sure you're compiling w/
PCRE support?
2. The "\w" will need double-backslash i.e. \\w - the double-slash
makes the unlang parser emit a single slash to the regexp input. The
regexp parser in unlang is a bit funky in this regard I'm afraid :o(
3. However you should only need to single-escape the regexp deliminter
(i.e. once, for the unlang parser).
4. That regexp doesn't work for me when I try it from the python repl;
how are you sure it's right
5. It's obvious from your text that you're assuming the regexps work
differently than they do - they don't do a "searchall" operation or
similar. It's a single match, and each %{n} refers to a single capture
group from a single match.
You'll need to write out a regexp in full that matches your input e.g.
if (blah =~ /\\w+ \\w+ .+\/.+\/.+\/.+\/.+\/(.+)\/.+/) {
update control {
Tmp-String-0 := "6th /-delimited is %{1}"
}
}
More information about the Freeradius-Users
mailing list