在执行一些小的正则表达式任务时,我遇到了这个问题。我有一个字符串,它是一个标签列表,看起来像这样:
foo,bar,qux,garp,wobble,thud
我需要做的是检查是否有特定的标签,例如“garp”在此列表中。 (无论是否匹配,最终匹配的内容并不重要。)

我的第一个愚蠢尝试是使用以下正则表达式:
[^,]garp[,$]
我的想法是在'garp'之前应该是行/字符串的开头或逗号,在'garp'之后应该是逗号或行/字符串的结尾。

现在,很明显该正则表达式是错误的:^和$都在字符类[]的上下文中更改了其行为。

我最终想到的是以下内容:
^garp$|^garp,|,garp,|,garp$
此正则表达式仅一一处理4种情况。 (标记在列表的开头,中间,结尾或作为列表的唯一元素。)最后一个正则表达式在我眼中有点难看,为了娱乐起见,我想稍微做一下更优雅。

有没有一种方法可以在字符类的上下文中使用行首/行尾(^和$)?

编辑:
好的,希望有更多信息,所以这里是:
我在Oracle SQL语句中使用它。可悲的是,这不允许有任何环视断言,但是由于我仅对是否存在匹配项(而不是匹配项)感兴趣,因此这实际上并不会影响我。
标签可以包含非字母字符,例如-或_,因此\ bgarp \ b将不起作用。正如SilentGhost所说,一个标签也可以包含另一个标签,因此/ garp /也不起作用。

最佳答案

您不能按照您希望的方式在字符类中使用^$-它们将按字面意义进行解释,但是您可以使用替换来达到相同的效果:

(^|,)garp(,|$)

关于regex - 正则表达式:在不同的上下文中使用行首/行尾符号(^或$),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2552428/

10-11 00:06