This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

URL Filtering Exceptions - regex help? which is correct?

Hello,

I am in Australia and I am trying to figure out the correct regex expressions for 

At the moment I just add both hoping that one is correct

1) I am getting confused about the \ in the far part of the web address which one is correct or what does it mean?

^https?://([A-Za-z0-9.-]*\.)?nab.com.au

^https?://([A-Za-z0-9.-]*\.)?nab\.com.au

^https?://([A-Za-z0-9.-]*\.)?nab\.com\.au

2) Also if I want to allow a link rather than a domain for example http://www.news.com.au/entertainment

 anything with that name but also anything other than www at the front - would it be ^https?://([A-Za-z0-9.-]*\.)?news\.com\.au/entertainment or something else?

3) also what is the difference between these two?

^https?://[A-Za-z0-9.-]*facebook\.com

^https?://([A-Za-z0-9.-]*\.)?ninemsn\.com

Which one is better?

Thank you


This thread was automatically locked due to age.
  • Hi StealthMatt,

    The UTM uses PCRE(Perl Compatible Regex) Regex's for it's rules. In PCRE, the \ tells the regex to treat the following character like it's a literal character not a meta-character. Meta-Character's are special characters like $ or . or \ that that mean something to PCRE.

    PHP: PCRE regex syntax - Manual is a decent reference on PCRE. This is one area where reading the manual is very important.

    For question 1), the third is correct as you always have to escape meta-characters. (The \ is the escape metachar)

    Your regex in 2) is essentially correct.

    For 3)

    ^https?://[A-Za-z0-9.-]*facebook\.com will match any url ending with the facebook.com so http://happysmiley333facebook.com/ will match.

    ^https?://([A-Za-z0-9.-]*\.)?ninemsn9\.com will match any subdomain of ninemsn9.com so http://www.ninemsn9.com/ or http://intra.ninemsn9.com/ will match whereas http://badninemsn9.com/ will not.

    The difference between the two is that the first will match a wider range of url's while the second will not. [A-Za-z0-9.-]* means "match any number of characters (zero or more) as long as they are A-Z, a-z, 0-9, (dot), or (dash)"

    ([A-Za-z0-9.-]*\.)? means "match zero or one instance of a string which is composed of any number of the following characters (A-Z, a-z, 0-9, (dot), (dash)) followed by a (dot)"

    Which is better? Normally the second is the better choice as it's tighter and less likely to catch random url's you may not have meant to.
  • Thanks Drew - you are awesome. I can now remove the excess rules.

    If I could buy you a beer I would

    I just have one more question; ^https?://([A-Za-z0-9.-]*\.)?ninemsn9\.com you say it will match any subdomain - will that also match any sub sub domain for example video.farm.ninemsn.com? or even blah.video.farm.ninsemsn.com?
  • I just have one more question; ^https?://([A-Za-z0-9.-]*\.)?ninemsn9\.com you say it will match any subdomain - will that also match any sub sub domain for example video.farm.ninemsn.com? or even blah.video.farm.ninsemsn.com?


    It should. The block ([A-Za-z0-9.-]*\.) will match any length string that ends in (dot) so you can have anything from '.' to 'www.my.cool.sub.domain.' as a match.

    The square brackets define what characters can be in the string. As a (dot) is listed in the character list (it's not considered a meta-character here btw), it's permitted to be in the string as one of the valid characters. The star after the brackets indicates there can be zero or more valid characters before the final (dot).

    Now outside the bracketed section is a question mark which permits there to be exactly zero or one instances of a string before the domain. That permits the case where a url has no part at the start, ie http://somedomain.com/
  • Can I ask what the difference is between these to regex expressions?

     

    ^https?://([A-Za-z0-9.-]*\.)?google\.co\.uk/

    ^https?://([A-Za-z0-9.-]+\.)*google\.co\.uk/

     

    I've been using the first one but I see on this forum that the second one is quite popular!

    My understanding is that they both mean the same;   http(s)://whatever.google.co.uk  OR  http(s)://google.co.uk  

     

    Is that right?

     

     

  • Hi, Steve, and welcome to the UTM Community!

    Whether it's written litre or liter, it's still a thousand ml. [;)]

    I can't think of any way they're different.  It's just a difference in the style used by the developer that wrote the particular Web Filtering Exception.  The form used up until five years ago here was ^https?://[A-Za-z0-9.-]*, and I think that's also identical.

    Cheers - Bob

     
    Sophos UTM Community Moderator
    Sophos Certified Architect - UTM
    Sophos Certified Engineer - XG
    Gold Solution Partner since 2005
    MediaSoft, Inc. USA