Выполняя небольшую задачу с регулярным выражением, я столкнулся с этой проблемой. У меня есть строка, которая представляет собой список тегов, который выглядит, например, следующим образом:
foo,bar,qux,garp,wobble,thud
Мне нужно было проверить, есть ли какой-либо тэг, например. "garp" был в этом списке. (То, что он окончательно совпадает, не очень важно, просто если есть совпадение или нет.)
Моя первая и немного глупая попытка в этом заключалась в использовании следующего регулярного выражения:
[^,]garp[,$]
Моя идея заключалась в том, что перед "garp" должно быть либо начало строки/строки, либо запятая, после "garp" должна быть либо запятая, либо конец строки/строки.
Теперь, сразу же очевидно, что это регулярное выражение неверно: и ^, и $изменяют свое поведение в контексте класса символов [].
В итоге я пришел к следующему:
^garp$|^garp,|,garp,|,garp$
Это регулярное выражение просто обрабатывает 4 случая по одному. (Тег в начале списка, в центре, в конце или в качестве единственного элемента списка.) Последнее регулярное выражение как-то немного уродливо в моих глазах и просто ради удовольствия, я хотел бы сделать это немного более элегантный.
Есть ли способ, как начало символа строки/конца строки (^ и $) можно использовать в контексте классов символов?
EDIT: Хорошо, еще одна информация была желательна, так вот: Я использую это в инструкции Oracle SQL. Это, к сожалению, не допускает никаких утверждений о взгляде, но поскольку меня интересует только наличие совпадения или нет (а не то, что соответствует), это не влияет на меня здесь. Теги могут содержать не-алфавитные символы, такие как - или _ so\bgarp\b, не будут работать. Также один тег может содержать другой тег, как сказал SilentGhost, так что /garp/doesnt тоже работает.