I want to use a regualr expression in a mysql search that macth a string and NOT the same string followed by a dot . character. As an example i want to match the product code 3.4.5.1 but not 3.4.5.1.4 I have a workaround using a double like :
SELECT * from mytable where myclolumn like '%3.4.5.1%' AND mycolumn NOT like '%3.4.5.1.%'....
Not a very elegant solution.
So I was trying to use REGEXP_LIKE(mycolumn,'(3.4.5.1)[^\.]')
In fact I have tested that pattern and works nicely in php and even online : https://regexr.com/66olc but seems that regex works in their own way in MYSQL because I obtain an empty search result. What I'm doing wrong?
CodePudding user response:
You can use
([^0-9]|^)3\.4\.5\.1([^.0-9]|$)
See the regex demo. Details:
([^0-9]|^)- a non-digit char ([^0-9]) or (|) start of string (^)3\.4\.5\.1-3.4.5.1literal string (dots in regex must be escaped with a literal backslash to match a.char, else,.matches any single char)([^.0-9]|$)- any char other than a.and digit ([^.0-9]), or (|) end of string ($).
