[squid-users] Squid regex grammar
Antony Stone
Antony.Stone at squid.open.source.it
Fri Oct 27 15:33:09 UTC 2017
On Friday 27 October 2017 at 17:26:18, Yuri wrote:
> 27.10.2017 21:17, Antony Stone пишет:
> > On Friday 27 October 2017 at 17:06:01, Yuri wrote:
> >> 27.10.2017 20:55, Alex Rousskov пишет:
> >>> When a regular expression is using extended features, the basic regular
> >>> expression compiler often (or even always?!) does not fail because it
> >>> views the extended features as ordinary plain characters. Thus, Squid
> >>> cannot tell that something went wrong.
> >>>
> >>>> $ echo "foobar" | grep --basic-regexp 'foo|bar'
> >>>> $ echo "foobar" | grep --extended-regexp 'foo|bar'
> >>>> foobar
> >>>
> >>> As you can see, the basic compiler is silent about the "|" character
> >>> that it does not support. Here is a similar example where a malformed
> >>>
> >>> extended regular expression is silently accepted by the basic compiler:
> >>>> $ echo "foobar" | grep --basic-regexp 'foo(bar'
> >>>> $ echo "foobar" | grep --extended-regexp 'foo(bar'
> >>>> grep: Unmatched ( or \(
> >>
> >> I would like either a clear documentation
> >
> > That sounds entirely reasonable - a statement something like "Squid is
> > guaranteed to use basic POSIX grammar, but extended grammar may be
> > available on different systems; the sysadmin should check"?
> >
> >> or some tool for checking whether the regular expression is correct from
> >> the point of view of the current library used by Squid or not.
> >
> > What does "correct" mean?
>
> "correct" mean "this will correctly works in Squid, not silently
> ignored". This is simple and obvious, isn't it?
No.
Suppose I write a | character (as per Alex's first example above) in my regex.
Basic POSIX will match that literally.
Extended grep will not.
Judging purely from what is written in my regex, did I mean the character to
be matched literally, or not?
Squid cannot tell.
> Adherence to standards provides interoperability - a familiar word?
Indeed.
> I asked a simple question. And wanted a simple answer.
Maybe there isn't one.
> And not reasoning, what can be, and what can not.
Then I apologise for trying to explain.
> Interoperability is a simple thing.
Er, no, it isn't.
Antony.
--
If the human brain were so simple that we could understand it,
we'd be so simple that we couldn't.
Please reply to the list;
please *don't* CC me.
More information about the squid-users
mailing list