[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