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