My problem is that i want to check the browserstring with pure regex.
Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13
-> should match
Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; Nexus One Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
should not match
my tried solution is: /?((?<=Android)(?:[^])*?(?=Mobile))/i
but it matches exactly wrong.
With some implementations of regular expressions, you can use a negative lookbehind assertion. Per the docs, a negative lookbehind written as
(?<!...)
matches only if the current position in the string is not preceded by a match for...
Here's a Python interactive script showing how to use negative lookbehind with your sample strings:
I'd just break it up
That said, depending on regex flaviour, you could combine that
or even
FYI see Lookahead/lookbehind
Update Tested these fine with Perl5 regex flavour (arguably the most popular flavour):
Shows:
for the given input in the OP
You use look ahead assertions to check if a string contains a word or not.
If you want to assure that the string contains "Android" at some place you can do it like this:
You can also combine them, to ensure that it contains "Android" at some place AND "Mobile" at some place:
If you want to ensure that a certain word is NOT in the string, use the negative look ahead:
This would require the word "Android to be in the string and the word "Mobile" is not allowed in the string. The
.*
part matches then the complete string/row when the assertions at the beginning are true.See it here on Regexr