I'm almost embarrassed to ask, but just almost. I seem to have an expression that works already, but it only seem to work in various regex tools like Regulator or online tools. Once in my C# code, it fails to hit where it should.
So the issue is that I need the regex to hit on user agent strings containing "android", "iphone" or "ipod", but not those also containing "opera". Simple enough, right?
So far, I've got this:
^(?=.*?\b(android|iphone|ipod)\b)(?!opera).*$
I'm using following options
RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.Singleline
Please tell me where I got it wrong.
Here are some user agent strings. The expression should trigger on first and last, while ignore the two in the middle:
Mozilla/5.0+(Linux;+U;+Android+2.2;+nb-no;+Nexus+One+Build/FRF91)+AppleWebKit/533.1+(KHTML,+like Gecko)+Version/4.0+Mobile+Safari/533.1
Opera/9.80 (Android; Linux; Opera Mobi/ADR-1012221546; U; pl) Presto/2.7.60 Version/10.5
Opera/9.80 (J2ME/iPhone;Opera Mini/5.0.019802/886; U; ja)Presto/2.4.15
Mozila/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Geckto) Version/3.0 Mobile/3A101a Safari/419.3
Thanks
Have you remembered to add a "@" in front of the pattern string? If not, the "\b" will be interpreted as a backspace.
Also as some say, you are not checking for Opera anywhere but in the beginning of the line, is that on purpose? I would probably use this syntax instead:@"^(?!opera)(?=.*\b(android|iphone|ipod)\b).*$"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With