While doing some small regex task I came upon this problem. I have a string that is a list of tags that looks e.g like this:
foo,bar,qux,garp,wobble,thud
What I needed to do was to check if a certain tag, e.g. 'garp' was in this list. (What it finally matches is not really important, just if there is a match or not.)
My first and a bit stupid try at this was to use the following regex:
[^,]garp[,$]
My idea was that before 'garp' there should either be the start of the line/string or a comma, after 'garp' there should be either a comma or the end of the line/string.
Now, it is instantly obvious that this regex is wrong: Both ^ and $ change their behaviour in the context of the character class [ ].
What I finally came up with is the following:
^garp$|^garp,|,garp,|,garp$
This regex just handles the 4 cases one by one. (Tag at beginning of list, in the center, at the end, or as the only element of the list.) The last regex is somehow a bit ugly in my eyes and just for funs sake I'd like to make it a bit more elegant.
Is there a way how the start of line/end of line characters (^ and $) can be used in the context of character classes?
EDIT: Ok, some more info was wished so here it is: I'm using this within an Oracle SQL statement. This sadly does not allow any look-around assertions but as I'm only interested if there is a match or not (and not what is matched) this does not really affect me here. The tags can contain non-alphabetical characters like - or _ so \bgarp\b would not work. Also one tag can contain an other tag as SilentGhost said, so /garp/ doesnt work either.
/garp/
on its own should be fine. It will tell you if the string 'garp' is matched anywhere in the line. A few questions: what language are you using? What is your larger goal? (Do you need to extract matches for example?) Why do you think that you need to match every particular way that 'garp' may appear in the line? – Boiler/garp/
would also findagarpor
for example. – Bilbo